ZGlmZiAtLWdpdCBhLy50cmF2aXMueW1sIGIvLnRyYXZpcy55bWwKaW5kZXggYWIwYWE1Ni4uNzE4ZTZhYSAxMDA2NDQKLS0tIGEvLnRyYXZpcy55bWwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTMsNiArMyw4IEBACiBwaHA6CiAgIC0gNS4zCiAgIC0gNS40CisgIC0gNS41CisgIC0gaGh2bQogICAKIGVudjoKICAgLSBEQj1teXNxbApAQCAtMjEsNiArMjMsMTUgQEAKIAogc2NyaXB0OiBwaHB1bml0IC0tY292ZXJhZ2UtdGV4dCAtLWNvbmZpZ3VyYXRpb24gdGVzdHMvdHJhdmlzLyREQi5waHB1bml0LnhtbAogCittYXRyaXg6CisgIGFsbG93X2ZhaWx1cmVzOgorICAgIC0gcGhwOiBoaHZtCisgIGV4Y2x1ZGU6CisgICAgLSBwaHA6IGhodm0KKyAgICAgIGVudjogREI9bXlzcWxpCisgICAgICBlbnY6IERCPXBnc3FsCisgICAgICBlbnY6IERCPXBkby9wZ3NxbAorCiBicmFuY2hlczoKICAgb25seToKICAgICAtIGRldmVsb3AKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL2NvbmZpZy9hdXRvbG9hZC5waHAgYi9hcHBsaWNhdGlvbi9jb25maWcvYXV0b2xvYWQucGhwCmluZGV4IDVhMjBjOTQuLjQzZDUzMTUgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL2NvbmZpZy9hdXRvbG9hZC5waHAKKysrIGIvYXBwbGljYXRpb24vY29uZmlnL2F1dG9sb2FkLnBocApAQCAtNzcsNiArNzcsMTEgQEAKIHwgUHJvdG90eXBlOgogfAogfAkkYXV0b2xvYWRbJ2xpYnJhcmllcyddID0gYXJyYXkoJ2RhdGFiYXNlJywgJ2VtYWlsJywgJ3htbHJwYycpOworfAorfCBZb3UgY2FuIGFsc28gc3VwcGx5IGFuIGFsdGVybmF0aXZlIGxpYnJhcnkgbmFtZSB0byBiZSBhc3NpZ25lZAorfCBpbiB0aGUgY29udHJvbGxlcjoKK3wKK3wJJGF1dG9sb2FkWydsaWJyYXJpZXMnXSA9IGFycmF5KCd1c2VyX2FnZW50JyA9PiAndWEnKTsKICovCiAKICRhdXRvbG9hZFsnbGlicmFyaWVzJ10gPSBhcnJheSgpOwpkaWZmIC0tZ2l0IGEvYXBwbGljYXRpb24vY29uZmlnL2NvbmZpZy5waHAgYi9hcHBsaWNhdGlvbi9jb25maWcvY29uZmlnLnBocAppbmRleCAwNjA4MzQ4Li5hZTc0OGRlIDEwMDY0NAotLS0gYS9hcHBsaWNhdGlvbi9jb25maWcvY29uZmlnLnBocAorKysgYi9hcHBsaWNhdGlvbi9jb25maWcvY29uZmlnLnBocApAQCAtMTQxLDE1ICsxNDEsMTggQEAKIHwgQWxsb3dlZCBVUkwgQ2hhcmFjdGVycwogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB8Ci18IFRoaXMgbGV0cyB5b3Ugc3BlY2lmeSB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIHdoaWNoIGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZAotfCB3aXRoaW4geW91ciBVUkxzLiAgV2hlbiBzb21lb25lIHRyaWVzIHRvIHN1Ym1pdCBhIFVSTCB3aXRoIGRpc2FsbG93ZWQKLXwgY2hhcmFjdGVycyB0aGV5IHdpbGwgZ2V0IGEgd2FybmluZyBtZXNzYWdlLgorfCBUaGlzIGxldHMgeW91IHNwZWNpZnkgd2hpY2ggY2hhcmFjdGVycyBhcmUgcGVybWl0dGVkIHdpdGhpbiB5b3VyIFVSTHMuCit8IFdoZW4gc29tZW9uZSB0cmllcyB0byBzdWJtaXQgYSBVUkwgd2l0aCBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgdGhleSB3aWxsCit8IGdldCBhIHdhcm5pbmcgbWVzc2FnZS4KIHwKIHwgQXMgYSBzZWN1cml0eSBtZWFzdXJlIHlvdSBhcmUgU1RST05HTFkgZW5jb3VyYWdlZCB0byByZXN0cmljdCBVUkxzIHRvCiB8IGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgQnkgZGVmYXVsdCBvbmx5IHRoZXNlIGFyZSBhbGxvd2VkOiBhLXogMC05fiUuOl8tCiB8CiB8IExlYXZlIGJsYW5rIHRvIGFsbG93IGFsbCBjaGFyYWN0ZXJzIC0tIGJ1dCBvbmx5IGlmIHlvdSBhcmUgaW5zYW5lLgogfAorfCBUaGUgY29uZmlndXJlZCB2YWx1ZSBpcyBhY3R1YWxseSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBjaGFyYWN0ZXIgZ3JvdXAKK3wgYW5kIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYXM6ICEgcHJlZ19tYXRjaCgnL15bPHBlcm1pdHRlZF91cmlfY2hhcnM+XSskL2kKK3wKIHwgRE8gTk9UIENIQU5HRSBUSElTIFVOTEVTUyBZT1UgRlVMTFkgVU5ERVJTVEFORCBUSEUgUkVQRVJDVVNTSU9OUyEhCiB8CiAqLwpAQCAtMjgyLDcgKzI4NSw3IEBACiB8ICdzZXNzX2RyaXZlcicJCQkJPSB0aGUgZHJpdmVyIHRvIGxvYWQ6IGNvb2tpZSAoQ2xhc3NpYyksIG5hdGl2ZSAoUEhQIHNlc3Npb25zKSwKIHwJb3IgeW91ciBjdXN0b20gZHJpdmVyIG5hbWUKIHwgJ3Nlc3NfdmFsaWRfZHJpdmVycycJCT0gYWRkaXRpb25hbCB2YWxpZCBkcml2ZXJzIHdoaWNoIG1heSBiZSBsb2FkZWQKLXwgJ3Nlc3NfY29va2llX25hbWUnCQk9IHRoZSBuYW1lIHlvdSB3YW50IGZvciB0aGUgY29va2llCit8ICdzZXNzX2Nvb2tpZV9uYW1lJwkJPSB0aGUgbmFtZSB5b3Ugd2FudCBmb3IgdGhlIGNvb2tpZSwgbXVzdCBjb250YWluIG9ubHkgWzAtOWEtel8tXSBjaGFyYWN0ZXJzCiB8ICdzZXNzX2V4cGlyYXRpb24nCQkJPSB0aGUgbnVtYmVyIG9mIFNFQ09ORFMgeW91IHdhbnQgdGhlIHNlc3Npb24gdG8gbGFzdC4KIHwgICBieSBkZWZhdWx0IHNlc3Npb25zIGxhc3QgNzIwMCBzZWNvbmRzICh0d28gaG91cnMpLiAgU2V0IHRvIHplcm8gZm9yIG5vIGV4cGlyYXRpb24uCiB8ICdzZXNzX2V4cGlyZV9vbl9jbG9zZScJPSBXaGV0aGVyIHRvIGNhdXNlIHRoZSBzZXNzaW9uIHRvIGV4cGlyZSBhdXRvbWF0aWNhbGx5CkBAIC0zMjcsNiArMzMwLDIwIEBACiAKIC8qCiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgU3RhbmRhcmRpemUgbmV3bGluZXMKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfAorfCBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc3RhbmRhcmRpemUgbmV3bGluZSBjaGFyYWN0ZXJzIGluIGlucHV0IGRhdGEsCit8IG1lYW5pbmcgdG8gcmVwbGFjZSBcclxuLCBcciwgXG4gb2NjdXJlbmNlcyB3aXRoIHRoZSBQSFBfRU9MIHZhbHVlLgorfAorfCBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHBvcnRhYmlsaXR5IGJldHdlZW4gVU5JWC1iYXNlZCBPU2VzLAorfCAodXN1YWxseSBcbikgYW5kIFdpbmRvd3MgKFxyXG4pLgorfAorKi8KKyRjb25maWdbJ3N0YW5kYXJkaXplX25ld2xpbmVzJ10gPSBUUlVFOworCisvKgorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB8IEdsb2JhbCBYU1MgRmlsdGVyaW5nCiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHwKQEAgLTM2Nyw2ICszODQsOSBAQAogfCBFdmVuIGlmIGl0IGRvZXMsIGhvd2V2ZXIsIG5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBjb21wcmVzc2lvbgogfCBzbyBlbmFibGUgb25seSBpZiB5b3UgYXJlIHJlYXNvbmFibHkgc3VyZSB5b3VyIHZpc2l0b3JzIGNhbiBoYW5kbGUgaXQuCiB8Cit8IE9ubHkgdXNlZCBpZiB6bGliLm91dHB1dF9jb21wcmVzc2lvbiBpcyB0dXJuZWQgb2ZmIGluIHlvdXIgcGhwLmluaS4KK3wgUGxlYXNlIGRvIG5vdCB1c2UgaXQgdG9nZXRoZXIgd2l0aCBodHRwZC1sZXZlbCBvdXRwdXQgY29tcHJlc3Npb24uCit8CiB8IFZFUlkgSU1QT1JUQU5UOiAgSWYgeW91IGFyZSBnZXR0aW5nIGEgYmxhbmsgcGFnZSB3aGVuIGNvbXByZXNzaW9uIGlzIGVuYWJsZWQgaXQKIHwgbWVhbnMgeW91IGFyZSBwcmVtYXR1cmVseSBvdXRwdXR0aW5nIHNvbWV0aGluZyB0byB5b3VyIGJyb3dzZXIuIEl0IGNvdWxkCiB8IGV2ZW4gYmUgYSBsaW5lIG9mIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiBvbmUgb2YgeW91ciBzY3JpcHRzLiAgRm9yCmRpZmYgLS1naXQgYS9hcHBsaWNhdGlvbi9jb25maWcvY29uc3RhbnRzLnBocCBiL2FwcGxpY2F0aW9uL2NvbmZpZy9jb25zdGFudHMucGhwCmluZGV4IGRjODQ3MTIuLmU3MTA5N2IgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL2NvbmZpZy9jb25zdGFudHMucGhwCisrKyBiL2FwcGxpY2F0aW9uL2NvbmZpZy9jb25zdGFudHMucGhwCkBAIC04MSwxMSArODEsMTEgQEAKIHwgVXNlZCB0byBpbmRpY2F0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgc2NyaXB0IGlzIGV4aXQoKWluZy4KIHwgV2hpbGUgdGhlcmUgaXMgbm8gdW5pdmVyc2FsIHN0YW5kYXJkIGZvciBlcnJvciBjb2RlcywgdGhlcmUgYXJlIHNvbWUKIHwgYnJvYWQgY29udmVudGlvbnMuICBUaHJlZSBzdWNoIGNvbnZlbnRpb25zIGFyZSBtZW50aW9uZWQgYmVsb3csIGZvcgotfCB0aG9zZSB3aG8gd2lzaCB0byBtYWtlIHVzZSBvZiB0aGVtLiAgVGhlIENvZGVJZ25pdGVyIGRlZmF1bHRzIHdlcmUgCit8IHRob3NlIHdobyB3aXNoIHRvIG1ha2UgdXNlIG9mIHRoZW0uICBUaGUgQ29kZUlnbml0ZXIgZGVmYXVsdHMgd2VyZQogfCBjaG9zZW4gZm9yIHRoZSBsZWFzdCBvdmVybGFwIHdpdGggdGhlc2UgY29udmVudGlvbnMsIHdoaWxlIHN0aWxsCiB8IGxlYXZpbmcgcm9vbSBmb3Igb3RoZXJzIHRvIGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIGFuZCB1c2VyCiB8IGFwcGxpY2F0aW9ucy4KLXwgCit8CiB8IFRoZSB0aHJlZSBtYWluIGNvbnZlbnRpb25zIHVzZWQgZm9yIGRldGVybWluaW5nIGV4aXQgc3RhdHVzIGNvZGVzCiB8IGFyZSBhcyBmb2xsb3dzOgogfApAQCAtMTA4LDcgKzEwOCw2IEBACiBkZWZpbmUoJ0VYSVRfREFUQUJBU0UnLCA4KTsgLy8gZGF0YWJhc2UgZXJyb3IKIGRlZmluZSgnRVhJVF9fQVVUT19NSU4nLCA5KTsgLy8gbG93ZXN0IGF1dG9tYXRpY2FsbHktYXNzaWduZWQgZXJyb3IgY29kZQogZGVmaW5lKCdFWElUX19BVVRPX01BWCcsIDEyNSk7IC8vIGhpZ2hlc3QgYXV0b21hdGljYWxseS1hc3NpZ25lZCBlcnJvciBjb2RlCi0gCiAKIC8qIEVuZCBvZiBmaWxlIGNvbnN0YW50cy5waHAgKi8KIC8qIExvY2F0aW9uOiAuL2FwcGxpY2F0aW9uL2NvbmZpZy9jb25zdGFudHMucGhwICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwbGljYXRpb24vY29uZmlnL2RhdGFiYXNlLnBocCBiL2FwcGxpY2F0aW9uL2NvbmZpZy9kYXRhYmFzZS5waHAKaW5kZXggZjBiODM5Ny4uNDRmZTMwNyAxMDA2NDQKLS0tIGEvYXBwbGljYXRpb24vY29uZmlnL2RhdGFiYXNlLnBocAorKysgYi9hcHBsaWNhdGlvbi9jb25maWcvZGF0YWJhc2UucGhwCkBAIC02OCw2ICs2OCwxMyBAQAogfAlbJ3N0cmljdG9uJ10gVFJVRS9GQUxTRSAtIGZvcmNlcyAnU3RyaWN0IE1vZGUnIGNvbm5lY3Rpb25zCiB8CQkJCQkJCS0gZ29vZCBmb3IgZW5zdXJpbmcgc3RyaWN0IFNRTCB3aGlsZSBkZXZlbG9waW5nCiB8CVsnZmFpbG92ZXInXSBhcnJheSAtIEEgYXJyYXkgd2l0aCAwIG9yIG1vcmUgZGF0YSBmb3IgY29ubmVjdGlvbnMgaWYgdGhlIG1haW4gc2hvdWxkIGZhaWwuCit8CVsnc2F2ZV9xdWVyaWVzJ10gVFJVRS9GQUxTRSAtIFdoZXRoZXIgdG8gInNhdmUiIGFsbCBleGVjdXRlZCBxdWVyaWVzLgorfCAJCQkJTk9URTogRGlzYWJsaW5nIHRoaXMgd2lsbCBhbHNvIGVmZmVjdGl2ZWx5IGRpc2FibGUgYm90aAorfCAJCQkJJHRoaXMtPmRiLT5sYXN0X3F1ZXJ5KCkgYW5kIHByb2ZpbGluZyBvZiBEQiBxdWVyaWVzLgorfCAJCQkJV2hlbiB5b3UgcnVuIGEgcXVlcnksIHdpdGggdGhpcyBzZXR0aW5nIHNldCB0byBUUlVFIChkZWZhdWx0KSwKK3wgCQkJCUNvZGVJZ25pdGVyIHdpbGwgc3RvcmUgdGhlIFNRTCBzdGF0ZW1lbnQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK3wgCQkJCUhvd2V2ZXIsIHRoaXMgbWF5IGNhdXNlIGhpZ2ggbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IGlmIHlvdSBydW4KK3wgCQkJCWEgbG90IG9mIFNRTCBxdWVyaWVzIC4uLiBkaXNhYmxlIHRoaXMgdG8gYXZvaWQgdGhhdCBwcm9ibGVtLgogfAogfCBUaGUgJGFjdGl2ZV9ncm91cCB2YXJpYWJsZSBsZXRzIHlvdSBjaG9vc2Ugd2hpY2ggY29ubmVjdGlvbiBncm91cCB0bwogfCBtYWtlIGFjdGl2ZS4gIEJ5IGRlZmF1bHQgdGhlcmUgaXMgb25seSBvbmUgZ3JvdXAgKHRoZSAnZGVmYXVsdCcgZ3JvdXApLgpAQCAtOTgsNyArMTA1LDggQEAKIAknZW5jcnlwdCcgPT4gRkFMU0UsCiAJJ2NvbXByZXNzJyA9PiBGQUxTRSwKIAknc3RyaWN0b24nID0+IEZBTFNFLAotCSdmYWlsb3ZlcicgPT4gYXJyYXkoKQorCSdmYWlsb3ZlcicgPT4gYXJyYXkoKSwKKwknc2F2ZV9xdWVyaWVzJyA9PiBUUlVFCiApOwogCiAvKiBFbmQgb2YgZmlsZSBkYXRhYmFzZS5waHAgKi8KZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL2NvbmZpZy9kb2N0eXBlcy5waHAgYi9hcHBsaWNhdGlvbi9jb25maWcvZG9jdHlwZXMucGhwCmluZGV4IGZlNTQyMDIuLmIxYTg5NTkgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL2NvbmZpZy9kb2N0eXBlcy5waHAKKysrIGIvYXBwbGljYXRpb24vY29uZmlnL2RvY3R5cGVzLnBocApAQCAtMjYsMTkgKzI2LDE5IEBACiAgKi8KIAogJF9kb2N0eXBlcyA9IGFycmF5KAotCSd4aHRtbDExJwkJPT4gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4nLAorCSd4aHRtbDExJwkJCT0+ICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+JywKIAkneGh0bWwxLXN0cmljdCcJCT0+ICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+JywKIAkneGh0bWwxLXRyYW5zJwkJPT4gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nLAogCSd4aHRtbDEtZnJhbWUnCQk9PiAnPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtZnJhbWVzZXQuZHRkIj4nLAogCSd4aHRtbC1iYXNpYzExJwkJPT4gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLWJhc2ljL3hodG1sLWJhc2ljMTEuZHRkIj4nLAotCSdodG1sNScJCQk9PiAnPCFET0NUWVBFIGh0bWw+JywKKwknaHRtbDUnCQkJCT0+ICc8IURPQ1RZUEUgaHRtbD4nLAogCSdodG1sNC1zdHJpY3QnCQk9PiAnPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+JywKIAknaHRtbDQtdHJhbnMnCQk9PiAnPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+JywKIAknaHRtbDQtZnJhbWUnCQk9PiAnPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgRnJhbWVzZXQvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvZnJhbWVzZXQuZHRkIj4nLAotCSdtYXRobWwxJwkJPT4gJzwhRE9DVFlQRSBtYXRoIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvTWF0aC9EVEQvbWF0aG1sMS9tYXRobWwuZHRkIj4nLAotCSdtYXRobWwyJwkJPT4gJzwhRE9DVFlQRSBtYXRoIFBVQkxJQyAiLS8vVzNDLy9EVEQgTWF0aE1MIDIuMC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9NYXRoL0RURC9tYXRobWwyL21hdGhtbDIuZHRkIj4nLAotCSdzdmcxMCcJCQk9PiAnPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjAvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0L0RURC9zdmcxMC5kdGQiPicsCi0JJ3N2ZzExJwkJCT0+ICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPicsCisJJ21hdGhtbDEnCQkJPT4gJzwhRE9DVFlQRSBtYXRoIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvTWF0aC9EVEQvbWF0aG1sMS9tYXRobWwuZHRkIj4nLAorCSdtYXRobWwyJwkJCT0+ICc8IURPQ1RZUEUgbWF0aCBQVUJMSUMgIi0vL1czQy8vRFREIE1hdGhNTCAyLjAvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvTWF0aC9EVEQvbWF0aG1sMi9tYXRobWwyLmR0ZCI+JywKKwknc3ZnMTAnCQkJCT0+ICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+JywKKwknc3ZnMTEnCQkJCT0+ICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPicsCiAJJ3N2ZzExLWJhc2ljJwkJPT4gJzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xIEJhc2ljLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLWJhc2ljLmR0ZCI+JywKIAknc3ZnMTEtdGlueScJCT0+ICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMSBUaW55Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLXRpbnkuZHRkIj4nLAogCSd4aHRtbC1tYXRoLXN2Zy14aCcJPT4gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNC94aHRtbC1tYXRoLXN2Zy94aHRtbC1tYXRoLXN2Zy5kdGQiPicsCmRpZmYgLS1naXQgYS9hcHBsaWNhdGlvbi9jb25maWcvZm9yZWlnbl9jaGFycy5waHAgYi9hcHBsaWNhdGlvbi9jb25maWcvZm9yZWlnbl9jaGFycy5waHAKaW5kZXggYjBjMzJjZi4uYWI5ODIyNCAxMDA2NDQKLS0tIGEvYXBwbGljYXRpb24vY29uZmlnL2ZvcmVpZ25fY2hhcnMucGhwCisrKyBiL2FwcGxpY2F0aW9uL2NvbmZpZy9mb3JlaWduX2NoYXJzLnBocApAQCAtNTAsMTYgKzUwLDE2IEBACiAJJy/QtC8nID0+ICdkJywKIAknL8OQfMSOfMSQfM6ULycgPT4gJ0RqJywKIAknL8OwfMSPfMSRfM60LycgPT4gJ2RqJywKLQknL8OIfMOJfMOKfMOLfMSSfMSUfMSWfMSYfMSafM6VfM6IfOG6vHzhurp84bq4fOG7gHzhur584buEfOG7gnzhu4Z80JV80IF80K0vJyA9PiAnRScsCi0JJy/DqHzDqXzDqnzDq3zEk3zElXzEl3zEmXzEm3zOrXzOtXzhur184bq7fOG6uXzhu4F84bq/fOG7hXzhu4N84buHfNC1fNGRfNGNLycgPT4gJ2UnLAorCScvw4h8w4l8w4p8w4t8xJJ8xJR8xJZ8xJh8xJp8zpV8zoh84bq8fOG6unzhurh84buAfOG6vnzhu4R84buCfOG7hnzQlXzQrS8nID0+ICdFJywKKwknL8OofMOpfMOqfMOrfMSTfMSVfMSXfMSZfMSbfM6tfM61fOG6vXzhurt84bq5fOG7gXzhur984buFfOG7g3zhu4d80LV80Y0vJyA9PiAnZScsCiAJJy/QpC8nID0+ICdGJywKIAknL9GELycgPT4gJ2YnLAotCScvxJx8xJ58xKB8xKJ8zpN80JMvJyA9PiAnRycsCi0JJy/EnXzEn3zEoXzEo3zOs3zQsy8nID0+ICdnJywKKwknL8ScfMSefMSgfMSifM6TfNCTfNKQLycgPT4gJ0cnLAorCScvxJ18xJ98xKF8xKN8zrN80LN80pEvJyA9PiAnZycsCiAJJy/EpHzEpi8nID0+ICdIJywKIAknL8SlfMSnLycgPT4gJ2gnLAotCScvw4x8w418w458w498xKh8xKp8xKx8x498xK58xLB8zpd8zol8zop8zpl8zqp84buIfOG7inzQmHzQmS8nID0+ICdJJywKLQknL8OsfMOtfMOufMOvfMSpfMSrfMStfMeQfMSvfMSxfM63fM6ufM6vfM65fM+KfOG7iXzhu4t80Lh80LkvJyA9PiAnaScsCisJJy/DjHzDjXzDjnzDj3zEqHzEqnzErHzHj3zErnzEsHzOl3zOiXzOinzOmXzOqnzhu4h84buKfNCYfNCrLycgPT4gJ0knLAorCScvw6x8w618w658w698xKl8xKt8xK18x5B8xK98xLF8zrd8zq58zq98zrl8z4p84buJfOG7i3zQuHzRi3zRly8nID0+ICdpJywKIAknL8S0LycgPT4gJ0onLAogCScvxLUvJyA9PiAnaicsCiAJJy/EtnzOmnzQmi8nID0+ICdLJywKQEAgLTgwLDEwICs4MCwxMCBAQAogCScvxZt8xZ18xZ98yJl8xaF8xb98z4N8z4J80YEvJyA9PiAncycsCiAJJy/ImnzFonzFpHzFpnzPhHzQoi8nID0+ICdUJywKIAknL8ibfMWjfMWlfMWnfNGCLycgPT4gJ3QnLAotCScvw5l8w5p8w5t8xah8xap8xax8xa58xbB8xbJ8xq98x5N8x5V8x5d8x5l8x5t8xah84bumfOG7pHzhu6p84buofOG7rnzhu6x84buwfNCjfNCqLycgPT4gJ1UnLAotCScvw7l8w7p8w7t8xal8xat8xa18xa98xbF8xbN8xrB8x5R8x5Z8x5h8x5p8x5x8z4V8z418z4t84bunfOG7pXzhu6t84bupfOG7r3zhu6184buxfNGDfNGKLycgPT4gJ3UnLAotCScvw518xbh8xbZ8zqV8zo58zqt84buyfOG7uHzhu7Z84bu0LycgPT4gJ1knLAotCScvw718w798xbd84buzfOG7uXzhu7d84bu1LycgPT4gJ3knLAorCScvw5l8w5p8w5t8xah8xap8xax8xa58xbB8xbJ8xq98x5N8x5V8x5d8x5l8x5t8xah84bumfOG7pHzhu6p84buofOG7rnzhu6x84buwfNCjLycgPT4gJ1UnLAorCScvw7l8w7p8w7t8xal8xat8xa18xa98xbF8xbN8xrB8x5R8x5Z8x5h8x5p8x5x8z4V8z418z4t84bunfOG7pXzhu6t84bupfOG7r3zhu6184buxfNGDLycgPT4gJ3UnLAorCScvw518xbh8xbZ8zqV8zo58zqt84buyfOG7uHzhu7Z84bu0fNCZLycgPT4gJ1knLAorCScvw718w798xbd84buzfOG7uXzhu7d84bu1fNC5LycgPT4gJ3knLAogCScv0JIvJyA9PiAnVicsCiAJJy/Qsi8nID0+ICd2JywKIAknL8W0LycgPT4gJ1cnLApAQCAtOTEsNyArOTEsNyBAQAogCScvxbl8xbt8xb18zpZ80JcvJyA9PiAnWicsCiAJJy/FunzFvHzFvnzOtnzQty8nID0+ICd6JywKIAknL8OGfMe8LycgPT4gJ0FFJywKLQknL8OfLyc9PiAnc3MnLAorCScvw58vJyA9PiAnc3MnLAogCScvxLIvJyA9PiAnSUonLAogCScvxLMvJyA9PiAnaWonLAogCScvxZIvJyA9PiAnT0UnLApAQCAtMTAxLDIyICsxMDEsMjggQEAKIAknL86yLycgPT4gJ3YnLAogCScvzrwvJyA9PiAnbScsCiAJJy/PiC8nID0+ICdwcycsCi0JJy/Qli8nPT4nWmgnLAotCScv0LYvJz0+J3poJywKLQknL9ClLyc9PidLaCcsCi0JJy/RhS8nPT4na2gnLAotCScv0KYvJz0+J1RjJywKLQknL9GGLyc9Pid0YycsCi0JJy/Qpy8nPT4nQ2gnLAotCScv0YcvJz0+J2NoJywKLQknL9CoLyc9PidTaCcsCi0JJy/RiC8nPT4nc2gnLAotCScv0KkvJz0+J1NoY2gnLAotCScv0YkvJz0+J3NoY2gnLAotCScv0K4vJz0+J0l1JywKLQknL9GOLyc9PidpdScsCi0JJy/Qry8nPT4nSWEnLAotCScv0Y8vJz0+J2lhJworCScv0IEvJyA9PiAnWW8nLAorCScv0ZEvJyA9PiAneW8nLAorCScv0IQvJyA9PiAnWWUnLAorCScv0ZQvJyA9PiAneWUnLAorCScv0IcvJyA9PiAnWWknLAorCScv0JYvJyA9PiAnWmgnLAorCScv0LYvJyA9PiAnemgnLAorCScv0KUvJyA9PiAnS2gnLAorCScv0YUvJyA9PiAna2gnLAorCScv0KYvJyA9PiAnVHMnLAorCScv0YYvJyA9PiAndHMnLAorCScv0KcvJyA9PiAnQ2gnLAorCScv0YcvJyA9PiAnY2gnLAorCScv0KgvJyA9PiAnU2gnLAorCScv0YgvJyA9PiAnc2gnLAorCScv0KkvJyA9PiAnU2hjaCcsCisJJy/RiS8nID0+ICdzaGNoJywKKwknL9CqfNGKfNCsfNGMLycgPT4gJycsCisJJy/Qri8nID0+ICdZdScsCisJJy/Rji8nID0+ICd5dScsCisJJy/Qry8nID0+ICdZYScsCisJJy/Rjy8nID0+ICd5YScKICk7CiAKIC8qIEVuZCBvZiBmaWxlIGZvcmVpZ25fY2hhcnMucGhwICovCmRpZmYgLS1naXQgYS9hcHBsaWNhdGlvbi9jb25maWcvbWlncmF0aW9uLnBocCBiL2FwcGxpY2F0aW9uL2NvbmZpZy9taWdyYXRpb24ucGhwCmluZGV4IGIzNDhmYjMuLmE3NTc2Y2EgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL2NvbmZpZy9taWdyYXRpb24ucGhwCisrKyBiL2FwcGxpY2F0aW9uL2NvbmZpZy9taWdyYXRpb24ucGhwCkBAIC0xMDUsNyArMTA1LDcgQEAKIHwgQWxzbywgd3JpdGluZyBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkIHdpdGhpbiB0aGUgbWlncmF0aW9ucyBwYXRoLgogfAogKi8KLSRjb25maWdbJ21pZ3JhdGlvbl9wYXRoJ10gPSBBUFBQQVRIIC4gJ21pZ3JhdGlvbnMvJzsKKyRjb25maWdbJ21pZ3JhdGlvbl9wYXRoJ10gPSBBUFBQQVRILidtaWdyYXRpb25zLyc7CiAKIC8qIEVuZCBvZiBmaWxlIG1pZ3JhdGlvbi5waHAgKi8KIC8qIExvY2F0aW9uOiAuL2FwcGxpY2F0aW9uL2NvbmZpZy9taWdyYXRpb24ucGhwICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwbGljYXRpb24vY29uZmlnL21pbWVzLnBocCBiL2FwcGxpY2F0aW9uL2NvbmZpZy9taW1lcy5waHAKaW5kZXggMzJkMTBmNi4uMjdkNGIyNSAxMDA2NDQKLS0tIGEvYXBwbGljYXRpb24vY29uZmlnL21pbWVzLnBocAorKysgYi9hcHBsaWNhdGlvbi9jb25maWcvbWltZXMucGhwCkBAIC03OCw2ICs3OCw3IEBACiAJJ3NpdCcJPT4JJ2FwcGxpY2F0aW9uL3gtc3R1ZmZpdCcsCiAJJ3RhcicJPT4JJ2FwcGxpY2F0aW9uL3gtdGFyJywKIAkndGd6Jwk9PglhcnJheSgnYXBwbGljYXRpb24veC10YXInLCAnYXBwbGljYXRpb24veC1nemlwLWNvbXByZXNzZWQnKSwKKwkneicJPT4JJ2FwcGxpY2F0aW9uL3gtY29tcHJlc3MnLAogCSd4aHRtbCcJPT4JJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsCiAJJ3hodCcJPT4JJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsCiAJJ3ppcCcJPT4JYXJyYXkoJ2FwcGxpY2F0aW9uL3gtemlwJywgJ2FwcGxpY2F0aW9uL3ppcCcsICdhcHBsaWNhdGlvbi94LXppcC1jb21wcmVzc2VkJywgJ2FwcGxpY2F0aW9uL3MtY29tcHJlc3NlZCcsICdtdWx0aXBhcnQveC16aXAnKSwKQEAgLTk2LDcgKzk3LDcgQEAKIAkncmEnCT0+CSdhdWRpby94LXJlYWxhdWRpbycsCiAJJ3J2Jwk9PgkndmlkZW8vdm5kLnJuLXJlYWx2aWRlbycsCiAJJ3dhdicJPT4JYXJyYXkoJ2F1ZGlvL3gtd2F2JywgJ2F1ZGlvL3dhdmUnLCAnYXVkaW8vd2F2JyksCi0JJ2JtcCcJPT4JYXJyYXkoJ2ltYWdlL2JtcCcsICdpbWFnZS94LXdpbmRvd3MtYm1wJyksCisJJ2JtcCcJPT4JYXJyYXkoJ2ltYWdlL2JtcCcsICdpbWFnZS94LWJtcCcsICdpbWFnZS94LWJpdG1hcCcsICdpbWFnZS94LXhiaXRtYXAnLCAnaW1hZ2UveC13aW4tYml0bWFwJywgJ2ltYWdlL3gtd2luZG93cy1ibXAnLCAnaW1hZ2UvbXMtYm1wJywgJ2ltYWdlL3gtbXMtYm1wJywgJ2FwcGxpY2F0aW9uL2JtcCcsICdhcHBsaWNhdGlvbi94LWJtcCcsICdhcHBsaWNhdGlvbi94LXdpbi1iaXRtYXAnKSwKIAknZ2lmJwk9PgknaW1hZ2UvZ2lmJywKIAknanBlZycJPT4JYXJyYXkoJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcGpwZWcnKSwKIAknanBnJwk9PglhcnJheSgnaW1hZ2UvanBlZycsICdpbWFnZS9wanBlZycpLApkaWZmIC0tZ2l0IGEvYXBwbGljYXRpb24vY29uZmlnL3NtaWxleXMucGhwIGIvYXBwbGljYXRpb24vY29uZmlnL3NtaWxleXMucGhwCmluZGV4IDRiMjUzMDkuLjNjNDljNDYgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL2NvbmZpZy9zbWlsZXlzLnBocAorKysgYi9hcHBsaWNhdGlvbi9jb25maWcvc21pbGV5cy5waHAKQEAgLTMwLDcgKzMwLDcgQEAKIHwgU01JTEVZUwogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB8IFRoaXMgZmlsZSBjb250YWlucyBhbiBhcnJheSBvZiBzbWlsZXlzIGZvciB1c2Ugd2l0aCB0aGUgZW1vdGljb24gaGVscGVyLgotfCBJbmRpdmlkdWFsIGltYWdlcyBjYW4gYmUgdXNlZCB0byByZXBsYWNlIG11bHRpcGxlIHNpbWlsZXlzLiAgRm9yIGV4YW1wbGU6Cit8IEluZGl2aWR1YWwgaW1hZ2VzIGNhbiBiZSB1c2VkIHRvIHJlcGxhY2UgbXVsdGlwbGUgc21pbGV5cy4gIEZvciBleGFtcGxlOgogfCA6LSkgYW5kIDopIHVzZSB0aGUgc2FtZSBpbWFnZSByZXBsYWNlbWVudC4KIHwKIHwgUGxlYXNlIHNlZSB1c2VyIGd1aWRlIGZvciBtb3JlIGluZm86CkBAIC04NCw3ICs4NCw3IEBACiAJJzp2YW1waXJlOicJCT0+CWFycmF5KCd2YW1waXJlLmdpZicsCQknMTknLAknMTknLAkndmFtcGlyZScpLAogCSc6c25ha2U6JwkJPT4JYXJyYXkoJ3NuYWtlLmdpZicsCQkJJzE5JywJJzE5JywJJ3NuYWtlJyksCiAJJzpleGNsYWltOicJCT0+CWFycmF5KCdleGNsYWltLmdpZicsCQknMTknLAknMTknLAknZXhjYWltJyksCi0JJzpxdWVzdGlvbjonCT0+CWFycmF5KCdxdWVzdGlvbi5naWYnLAkJJzE5JywJJzE5JywJJ3F1ZXN0aW9uJykgLy8gbm8gY29tbWEgYWZ0ZXIgbGFzdCBpdGVtCisJJzpxdWVzdGlvbjonCT0+CWFycmF5KCdxdWVzdGlvbi5naWYnLAkJJzE5JywJJzE5JywJJ3F1ZXN0aW9uJykKIAogKTsKIApkaWZmIC0tZ2l0IGEvYXBwbGljYXRpb24vY29uZmlnL3VzZXJfYWdlbnRzLnBocCBiL2FwcGxpY2F0aW9uL2NvbmZpZy91c2VyX2FnZW50cy5waHAKaW5kZXggODhhYjA2My4uODE5ZTQyYiAxMDA2NDQKLS0tIGEvYXBwbGljYXRpb24vY29uZmlnL3VzZXJfYWdlbnRzLnBocAorKysgYi9hcHBsaWNhdGlvbi9jb25maWcvdXNlcl9hZ2VudHMucGhwCkBAIC0zNiw2ICszNiw3IEBACiAqLwogCiAkcGxhdGZvcm1zID0gYXJyYXkoCisJJ3dpbmRvd3MgbnQgNi4zJwk9PiAnV2luZG93cyA4LjEnLAogCSd3aW5kb3dzIG50IDYuMicJPT4gJ1dpbmRvd3MgOCcsCiAJJ3dpbmRvd3MgbnQgNi4xJwk9PiAnV2luZG93cyA3JywKIAknd2luZG93cyBudCA2LjAnCT0+ICdXaW5kb3dzIFZpc3RhJywKQEAgLTUwLDYgKzUxLDcgQEAKIAknd2luOTgnCQkJCT0+ICdXaW5kb3dzIDk4JywKIAknd2luZG93cyA5NScJCT0+ICdXaW5kb3dzIDk1JywKIAknd2luOTUnCQkJCT0+ICdXaW5kb3dzIDk1JywKKwknd2luZG93cyBwaG9uZScJCQk9PiAnV2luZG93cyBQaG9uZScsCiAJJ3dpbmRvd3MnCQkJPT4gJ1Vua25vd24gV2luZG93cyBPUycsCiAJJ2FuZHJvaWQnCQkJPT4gJ0FuZHJvaWQnLAogCSdibGFja2JlcnJ5JwkJPT4gJ0JsYWNrQmVycnknLApAQCAtODAsMTEgKzgyLDE1IEBACiAvLyBUaGUgb3JkZXIgb2YgdGhpcyBhcnJheSBzaG91bGQgTk9UIGJlIGNoYW5nZWQuIE1hbnkgYnJvd3NlcnMgcmV0dXJuCiAvLyBtdWx0aXBsZSBicm93c2VyIHR5cGVzIHNvIHdlIHdhbnQgdG8gaWRlbnRpZnkgdGhlIHN1Yi10eXBlIGZpcnN0LgogJGJyb3dzZXJzID0gYXJyYXkoCisJJ09QUicJCQk9PiAnT3BlcmEnLAogCSdGbG9jaycJCQk9PiAnRmxvY2snLAogCSdDaHJvbWUnCQk9PiAnQ2hyb21lJywKKwkvLyBPcGVyYSAxMCsgYWx3YXlzIHJlcG9ydHMgT3BlcmEvOS44MCBhbmQgYXBwZW5kcyBWZXJzaW9uLzxyZWFsIHZlcnNpb24+IHRvIHRoZSB1c2VyIGFnZW50IHN0cmluZworCSdPcGVyYS4qP1ZlcnNpb24nCT0+ICdPcGVyYScsCiAJJ09wZXJhJwkJCT0+ICdPcGVyYScsCiAJJ01TSUUnCQkJPT4gJ0ludGVybmV0IEV4cGxvcmVyJywKIAknSW50ZXJuZXQgRXhwbG9yZXInCT0+ICdJbnRlcm5ldCBFeHBsb3JlcicsCisJJ1RyaWRlbnQuKiBydicJPT4gJ0ludGVybmV0IEV4cGxvcmVyJywKIAknU2hpaXJhJwkJPT4gJ1NoaWlyYScsCiAJJ0ZpcmVmb3gnCQk9PiAnRmlyZWZveCcsCiAJJ0NoaW1lcmEnCQk9PiAnQ2hpbWVyYScsCkBAIC0xMDIsNyArMTA4LDggQEAKIAknaG90amF2YScJCT0+ICdIb3RKYXZhJywKIAknYW1heWEnCQkJPT4gJ0FtYXlhJywKIAknSUJyb3dzZScJCT0+ICdJQnJvd3NlJywKLQknTWF4dGhvbicJCT0+ICdNYXh0aG9uJworCSdNYXh0aG9uJwkJPT4gJ01heHRob24nLAorCSdVYnVudHUnCQk9PiAnVWJ1bnR1IFdlYiBCcm93c2VyJwogKTsKIAogJG1vYmlsZXMgPSBhcnJheSgKQEAgLTE4Miw3ICsxODksNyBAQAogCSdvcGVyYW1pbmknCQk9PiAnT3BlcmEgTWluaScsCiAJJ29wZXJhIG1pbmknCT0+ICdPcGVyYSBNaW5pJywKIAknb3BlcmEgbW9iaScJPT4gJ09wZXJhIE1vYmlsZScsCi0JJ2Zlbm5lYycJPT4gJ0ZpcmVmb3ggTW9iaWxlJywKKwknZmVubmVjJwkJPT4gJ0ZpcmVmb3ggTW9iaWxlJywKIAogCS8vIE90aGVyCiAJJ2RpZ2l0YWwgcGF0aHMnCT0+ICdEaWdpdGFsIFBhdGhzJywKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL3dlbGNvbWUucGhwIGIvYXBwbGljYXRpb24vY29udHJvbGxlcnMvV2VsY29tZS5waHAKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXBwbGljYXRpb24vY29udHJvbGxlcnMvd2VsY29tZS5waHAKcmVuYW1lIHRvIGFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL1dlbGNvbWUucGhwCmluZGV4IDJmMGUzNTguLjMxY2VlYTkgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL3dlbGNvbWUucGhwCisrKyBiL2FwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL1dlbGNvbWUucGhwCkBAIC01MCw0ICs1MCw0IEBACiB9CiAKIC8qIEVuZCBvZiBmaWxlIHdlbGNvbWUucGhwICovCi0vKiBMb2NhdGlvbjogLi9hcHBsaWNhdGlvbi9jb250cm9sbGVycy93ZWxjb21lLnBocCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKy8qIExvY2F0aW9uOiAuL2FwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL1dlbGNvbWUucGhwICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaS9lcnJvcl80MDQucGhwIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaS9lcnJvcl80MDQucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZmZkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvY2xpL2Vycm9yXzQwNC5waHAKQEAgLTAsMCArMSwzMyBAQAorPD9waHAKKy8qKgorICogQ29kZUlnbml0ZXIKKyAqCisgKiBBbiBvcGVuIHNvdXJjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBmcmFtZXdvcmsgZm9yIFBIUCA1LjIuNCBvciBuZXdlcgorICoKKyAqIE5PVElDRSBPRiBMSUNFTlNFCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDMuMAorICoKKyAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIChBRkwgMy4wKSB0aGF0IGlzCisgKiBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlcyBsaWNlbnNlX2FmbC50eHQgLyBsaWNlbnNlX2FmbC5yc3QuCisgKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZCB3aWRlIHdlYiBhdCB0aGlzIFVSTDoKKyAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wCisgKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0byBvYnRhaW4gaXQKKyAqIHRocm91Z2ggdGhlIHdvcmxkIHdpZGUgd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbCB0bworICogbGljZW5zaW5nQGVsbGlzbGFiLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LgorICoKKyAqIEBwYWNrYWdlCQlDb2RlSWduaXRlcgorICogQGF1dGhvcgkJRWxsaXNMYWIgRGV2IFRlYW0KKyAqIEBjb3B5cmlnaHQJQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxMywgRWxsaXNMYWIsIEluYy4gKGh0dHA6Ly9lbGxpc2xhYi5jb20vKQorICogQGxpY2Vuc2UJCWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAoQUZMIDMuMCkKKyAqIEBsaW5rCQlodHRwOi8vY29kZWlnbml0ZXIuY29tCisgKiBAc2luY2UJCVZlcnNpb24gMy4wCisgKiBAZmlsZXNvdXJjZQorICovCitkZWZpbmVkKCdCQVNFUEFUSCcpIE9SIGV4aXQoJ05vIGRpcmVjdCBzY3JpcHQgYWNjZXNzIGFsbG93ZWQnKTsKKworZWNobyAiXG5FUlJPUjogIiwKKwkkaGVhZGluZywKKwkiXG5cbiIsCisJJG1lc3NhZ2UsCisJIlxuXG4iOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9jbGkvZXJyb3JfZGIucGhwIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaS9lcnJvcl9kYi5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhM2EzNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9jbGkvZXJyb3JfZGIucGhwCkBAIC0wLDAgKzEsMzMgQEAKKzw/cGhwCisvKioKKyAqIENvZGVJZ25pdGVyCisgKgorICogQW4gb3BlbiBzb3VyY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIGZvciBQSFAgNS4yLjQgb3IgbmV3ZXIKKyAqCisgKiBOT1RJQ0UgT0YgTElDRU5TRQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKyAqCisgKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAoQUZMIDMuMCkgdGhhdCBpcworICogYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZXMgbGljZW5zZV9hZmwudHh0IC8gbGljZW5zZV9hZmwucnN0LgorICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQgd2lkZSB3ZWIgYXQgdGhpcyBVUkw6CisgKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMAorICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gb2J0YWluIGl0CisgKiB0aHJvdWdoIHRoZSB3b3JsZCB3aWRlIHdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWwgdG8KKyAqIGxpY2Vuc2luZ0BlbGxpc2xhYi5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KKyAqCisgKiBAcGFja2FnZQkJQ29kZUlnbml0ZXIKKyAqIEBhdXRob3IJCUVsbGlzTGFiIERldiBUZWFtCisgKiBAY29weXJpZ2h0CUNvcHlyaWdodCAoYykgMjAwOCAtIDIwMTMsIEVsbGlzTGFiLCBJbmMuIChodHRwOi8vZWxsaXNsYWIuY29tLykKKyAqIEBsaWNlbnNlCQlodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKEFGTCAzLjApCisgKiBAbGluawkJaHR0cDovL2NvZGVpZ25pdGVyLmNvbQorICogQHNpbmNlCQlWZXJzaW9uIDMuMAorICogQGZpbGVzb3VyY2UKKyAqLworZGVmaW5lZCgnQkFTRVBBVEgnKSBPUiBleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7CisKK2VjaG8gIlxuRGF0YWJhc2UgZXJyb3I6ICIsCisJJGhlYWRpbmcsCisJIlxuXG4iLAorCSRtZXNzYWdlLAorCSJcblxuIjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvY2xpL2Vycm9yX2dlbmVyYWwucGhwIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaS9lcnJvcl9nZW5lcmFsLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTVmZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaS9lcnJvcl9nZW5lcmFsLnBocApAQCAtMCwwICsxLDMzIEBACis8P3BocAorLyoqCisgKiBDb2RlSWduaXRlcgorICoKKyAqIEFuIG9wZW4gc291cmNlIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGZyYW1ld29yayBmb3IgUEhQIDUuMi40IG9yIG5ld2VyCisgKgorICogTk9USUNFIE9GIExJQ0VOU0UKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMy4wCisgKgorICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKEFGTCAzLjApIHRoYXQgaXMKKyAqIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGVzIGxpY2Vuc2VfYWZsLnR4dCAvIGxpY2Vuc2VfYWZsLnJzdC4KKyAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkIHdpZGUgd2ViIGF0IHRoaXMgVVJMOgorICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAKKyAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvIG9idGFpbiBpdAorICogdGhyb3VnaCB0aGUgd29ybGQgd2lkZSB3ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvCisgKiBsaWNlbnNpbmdAZWxsaXNsYWIuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuCisgKgorICogQHBhY2thZ2UJCUNvZGVJZ25pdGVyCisgKiBAYXV0aG9yCQlFbGxpc0xhYiBEZXYgVGVhbQorICogQGNvcHlyaWdodAlDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDEzLCBFbGxpc0xhYiwgSW5jLiAoaHR0cDovL2VsbGlzbGFiLmNvbS8pCisgKiBAbGljZW5zZQkJaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIChBRkwgMy4wKQorICogQGxpbmsJCWh0dHA6Ly9jb2RlaWduaXRlci5jb20KKyAqIEBzaW5jZQkJVmVyc2lvbiAxLjAKKyAqIEBmaWxlc291cmNlCisgKi8KK2RlZmluZWQoJ0JBU0VQQVRIJykgT1IgZXhpdCgnTm8gZGlyZWN0IHNjcmlwdCBhY2Nlc3MgYWxsb3dlZCcpOworCitlY2hvICJcbkVSUk9SOiAiLAorCSRoZWFkaW5nLAorCSJcblxuIiwKKwkkbWVzc2FnZSwKKwkiXG5cbiI7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2Vycm9yX3BocC5waHAgYi9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvY2xpL2Vycm9yX3BocC5waHAKc2ltaWxhcml0eSBpbmRleCA2MSUKY29weSBmcm9tIGFwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl9waHAucGhwCmNvcHkgdG8gYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaS9lcnJvcl9waHAucGhwCmluZGV4IGM0ZTZiMjkuLjRkYmM0MTAgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl9waHAucGhwCisrKyBiL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9jbGkvZXJyb3JfcGhwLnBocApAQCAtMjEsMzkgKzIxLDMwIEBACiAgKiBAY29weXJpZ2h0CUNvcHlyaWdodCAoYykgMjAwOCAtIDIwMTMsIEVsbGlzTGFiLCBJbmMuIChodHRwOi8vZWxsaXNsYWIuY29tLykKICAqIEBsaWNlbnNlCQlodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKEFGTCAzLjApCiAgKiBAbGluawkJaHR0cDovL2NvZGVpZ25pdGVyLmNvbQotICogQHNpbmNlCQlWZXJzaW9uIDEuMAorICogQHNpbmNlCQlWZXJzaW9uIDMuMAogICogQGZpbGVzb3VyY2UKICAqLwogZGVmaW5lZCgnQkFTRVBBVEgnKSBPUiBleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7CiA/PgogCi08ZGl2IHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICM5OTAwMDA7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luOjAgMCAxMHB4IDA7Ij4KK0EgUEhQIEVycm9yIHdhcyBlbmNvdW50ZXJlZAogCi08aDQ+QSBQSFAgRXJyb3Igd2FzIGVuY291bnRlcmVkPC9oND4KLQotPHA+U2V2ZXJpdHk6IDw/cGhwIGVjaG8gJHNldmVyaXR5OyA/PjwvcD4KLTxwPk1lc3NhZ2U6ICA8P3BocCBlY2hvICRtZXNzYWdlOyA/PjwvcD4KLTxwPkZpbGVuYW1lOiA8P3BocCBlY2hvICRmaWxlcGF0aDsgPz48L3A+Ci08cD5MaW5lIE51bWJlcjogPD9waHAgZWNobyAkbGluZTsgPz48L3A+CitTZXZlcml0eTogPD9waHAgZWNobyAkc2V2ZXJpdHk7Pz4KK01lc3NhZ2U6ICA8P3BocCBlY2hvICRtZXNzYWdlOz8+CitGaWxlbmFtZTogPD9waHAgZWNobyAkZmlsZXBhdGg7Pz4KK0xpbmUgTnVtYmVyOiA8P3BocCBlY2hvICRsaW5lOz8+CiAKIDw/cGhwIGlmIChkZWZpbmVkKCdTSE9XX0RFQlVHX0JBQ0tUUkFDRScpICYmIFNIT1dfREVCVUdfQkFDS1RSQUNFID09PSBUUlVFKTogPz4KIAotCTxwPkJhY2t0cmFjZTogPC9wPgotCTw/cGhwIGZvcmVhY2goZGVidWdfYmFja3RyYWNlKCkgYXMgJGVycm9yKTogPz4KK0JhY2t0cmFjZToKKwk8P3BocCBmb3JlYWNoIChkZWJ1Z19iYWNrdHJhY2UoKSBhcyAkZXJyb3IpOiA/PgorCQk8P3BocCBpZiAoaXNzZXQoJGVycm9yWydmaWxlJ10pICYmIHN0cnBvcygkZXJyb3JbJ2ZpbGUnXSwgcmVhbHBhdGgoQkFTRVBBVEgpKSAhPT0gMCk6ID8+CiAKLQkJPD9waHAgaWYoaXNzZXQoJGVycm9yWydmaWxlJ10pICYmCi0JCSAgICAgICAgIHN0cnBvcygkZXJyb3JbJ2ZpbGUnXSwgcmVhbHBhdGgoQkFTRVBBVEgpKSAhPT0gMCk6ID8+Ci0KLQkJCTxwIHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4Ij4KLQkJCUZpbGU6IDw/cGhwIGVjaG8gJGVycm9yWydmaWxlJ10gPz48YnIgLz4KLQkJCUxpbmU6IDw/cGhwIGVjaG8gJGVycm9yWydsaW5lJ10gPz48YnIgLz4KLQkJCUZ1bmN0aW9uOiA8P3BocCBlY2hvICRlcnJvclsnZnVuY3Rpb24nXSA/PgotCQkJPC9wPgorCUZpbGU6IDw/cGhwIGVjaG8gJGVycm9yWydmaWxlJ107Pz4KKwlMaW5lOiA8P3BocCBlY2hvICRlcnJvclsnbGluZSddOz8+CisJRnVuY3Rpb246IDw/cGhwIGVjaG8gJGVycm9yWydmdW5jdGlvbiddOz8+CiAKIAkJPD9waHAgZW5kaWYgPz4KIAotCTw/cGhwIGVuZGZvcmVhY2ggPz48L3A+Ci0KLTw/cGhwIGVuZGlmID8+Ci0KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwk8P3BocCBlbmRmb3JlYWNoID8+Cis8P3BocCBlbmRpZiA/PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9jbGkvaW5kZXguaHRtbCBiL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9jbGkvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTQyYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaS9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzxodG1sPgorPGhlYWQ+CisJPHRpdGxlPjQwMyBGb3JiaWRkZW48L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+CisKKzxwPkRpcmVjdG9yeSBhY2Nlc3MgaXMgZm9yYmlkZGVuLjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl80MDQucGhwIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvZXJyb3JfNDA0LnBocApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvZXJyb3JfNDA0LnBocApyZW5hbWUgdG8gYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvZXJyb3JfNDA0LnBocAppbmRleCAyMWZmNmRiLi4xMWI4ZDk5IDEwMDY0NAotLS0gYS9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvZXJyb3JfNDA0LnBocAorKysgYi9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvaHRtbC9lcnJvcl80MDQucGhwCkBAIC03NCw4ICs3NCw2IEBACiAJbWFyZ2luOiAxMHB4OwogCWJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7CiAJYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwotCS1tb3otYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwotCS13ZWJraXQtYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwogfQogCiBwIHsKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl9kYi5waHAgYi9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvaHRtbC9lcnJvcl9kYi5waHAKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2Vycm9yX2RiLnBocApyZW5hbWUgdG8gYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvZXJyb3JfZGIucGhwCmluZGV4IGEyNTFlMWMuLmYzNzZlMDkgMTAwNjQ0Ci0tLSBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl9kYi5waHAKKysrIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvZXJyb3JfZGIucGhwCkBAIC03NCw4ICs3NCw2IEBACiAJbWFyZ2luOiAxMHB4OwogCWJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7CiAJYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwotCS1tb3otYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwotCS13ZWJraXQtYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwogfQogCiBwIHsKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl9nZW5lcmFsLnBocCBiL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9odG1sL2Vycm9yX2dlbmVyYWwucGhwCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl9nZW5lcmFsLnBocApyZW5hbWUgdG8gYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvZXJyb3JfZ2VuZXJhbC5waHAKaW5kZXggYjlkNTQzOC4uZGY0MzViMyAxMDA2NDQKLS0tIGEvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2Vycm9yX2dlbmVyYWwucGhwCisrKyBiL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9odG1sL2Vycm9yX2dlbmVyYWwucGhwCkBAIC03NCw4ICs3NCw2IEBACiAJbWFyZ2luOiAxMHB4OwogCWJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7CiAJYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwotCS1tb3otYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwotCS13ZWJraXQtYm94LXNoYWRvdzogMCAwIDhweCAjRDBEMEQwOwogfQogCiBwIHsKZGlmZiAtLWdpdCBhL2FwcGxpY2F0aW9uL3ZpZXdzL2Vycm9ycy9lcnJvcl9waHAucGhwIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvZXJyb3JfcGhwLnBocApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBhcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvZXJyb3JfcGhwLnBocApyZW5hbWUgdG8gYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvZXJyb3JfcGhwLnBocAppbmRleCBjNGU2YjI5Li4yMjY3ZDk4IDEwMDY0NAotLS0gYS9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvZXJyb3JfcGhwLnBocAorKysgYi9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvaHRtbC9lcnJvcl9waHAucGhwCkBAIC0zOCwxMSArMzgsMTAgQEAKIAogPD9waHAgaWYgKGRlZmluZWQoJ1NIT1dfREVCVUdfQkFDS1RSQUNFJykgJiYgU0hPV19ERUJVR19CQUNLVFJBQ0UgPT09IFRSVUUpOiA/PgogCi0JPHA+QmFja3RyYWNlOiA8L3A+Ci0JPD9waHAgZm9yZWFjaChkZWJ1Z19iYWNrdHJhY2UoKSBhcyAkZXJyb3IpOiA/PgorCTxwPkJhY2t0cmFjZTo8L3A+CisJPD9waHAgZm9yZWFjaCAoZGVidWdfYmFja3RyYWNlKCkgYXMgJGVycm9yKTogPz4KIAotCQk8P3BocCBpZihpc3NldCgkZXJyb3JbJ2ZpbGUnXSkgJiYKLQkJICAgICAgICAgc3RycG9zKCRlcnJvclsnZmlsZSddLCByZWFscGF0aChCQVNFUEFUSCkpICE9PSAwKTogPz4KKwkJPD9waHAgaWYgKGlzc2V0KCRlcnJvclsnZmlsZSddKSAmJiBzdHJwb3MoJGVycm9yWydmaWxlJ10sIHJlYWxwYXRoKEJBU0VQQVRIKSkgIT09IDApOiA/PgogCiAJCQk8cCBzdHlsZT0ibWFyZ2luLWxlZnQ6MTBweCI+CiAJCQlGaWxlOiA8P3BocCBlY2hvICRlcnJvclsnZmlsZSddID8+PGJyIC8+CmRpZmYgLS1naXQgYS9hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMvaHRtbC9pbmRleC5odG1sIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTQyYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDEwIEBACis8aHRtbD4KKzxoZWFkPgorCTx0aXRsZT40MDMgRm9yYmlkZGVuPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8cD5EaXJlY3RvcnkgYWNjZXNzIGlzIGZvcmJpZGRlbi48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBsaWNhdGlvbi92aWV3cy93ZWxjb21lX21lc3NhZ2UucGhwIGIvYXBwbGljYXRpb24vdmlld3Mvd2VsY29tZV9tZXNzYWdlLnBocAppbmRleCAzY2M4YjgwLi4zNDFhOGQwIDEwMDY0NAotLS0gYS9hcHBsaWNhdGlvbi92aWV3cy93ZWxjb21lX21lc3NhZ2UucGhwCisrKyBiL2FwcGxpY2F0aW9uL3ZpZXdzL3dlbGNvbWVfbWVzc2FnZS5waHAKQEAgLTg3LDggKzg3LDcgQEAKIAkjY29udGFpbmVyIHsKIAkJbWFyZ2luOiAxMHB4OwogCQlib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwOwotCQktbW96LWJveC1zaGFkb3c6IDAgMCA4cHggI0QwRDBEMDsKLQkJLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgOHB4ICNEMEQwRDA7CisJCWJveC1zaGFkb3c6IDAgMCA4cHggI0QwRDBEMDsKIAl9CiAJPC9zdHlsZT4KIDwvaGVhZD4KQEAgLTEwNCw3ICsxMDMsNyBAQAogCQk8Y29kZT5hcHBsaWNhdGlvbi92aWV3cy93ZWxjb21lX21lc3NhZ2UucGhwPC9jb2RlPgogCiAJCTxwPlRoZSBjb3JyZXNwb25kaW5nIGNvbnRyb2xsZXIgZm9yIHRoaXMgcGFnZSBpcyBmb3VuZCBhdDo8L3A+Ci0JCTxjb2RlPmFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL3dlbGNvbWUucGhwPC9jb2RlPgorCQk8Y29kZT5hcHBsaWNhdGlvbi9jb250cm9sbGVycy9XZWxjb21lLnBocDwvY29kZT4KIAogCQk8cD5JZiB5b3UgYXJlIGV4cGxvcmluZyBDb2RlSWduaXRlciBmb3IgdGhlIHZlcnkgZmlyc3QgdGltZSwgeW91IHNob3VsZCBzdGFydCBieSByZWFkaW5nIHRoZSA8YSBocmVmPSJ1c2VyX2d1aWRlLyI+VXNlciBHdWlkZTwvYT4uPC9wPgogCTwvZGl2PgpkaWZmIC0tZ2l0IGEvaW5kZXgucGhwIGIvaW5kZXgucGhwCmluZGV4IGNmYjAwM2UuLjcyYzk3YzQgMTAwNzU1Ci0tLSBhL2luZGV4LnBocAorKysgYi9pbmRleC5waHAKQEAgLTYxLDcgKzYxLDcgQEAKIAogCWNhc2UgJ3Rlc3RpbmcnOgogCWNhc2UgJ3Byb2R1Y3Rpb24nOgotCQllcnJvcl9yZXBvcnRpbmcoRV9BTEwgXiBFX05PVElDRSBeIEVfREVQUkVDQVRFRCBeIEVfU1RSSUNUKTsKKwkJZXJyb3JfcmVwb3J0aW5nKEVfQUxMICYgfkVfTk9USUNFICYgfkVfREVQUkVDQVRFRCAmIH5FX1NUUklDVCk7CiAJCWluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7CiAJYnJlYWs7CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogVGhpcyB2YXJpYWJsZSBtdXN0IGNvbnRhaW4gdGhlIG5hbWUgb2YgeW91ciAic3lzdGVtIiBmb2xkZXIuCi0gKiBJbmNsdWRlIHRoZSBwYXRoIGlmIHRoZSBmb2xkZXIgaXMgbm90IGluIHRoZSBzYW1lICBkaXJlY3RvcnkKKyAqIEluY2x1ZGUgdGhlIHBhdGggaWYgdGhlIGZvbGRlciBpcyBub3QgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CiAgKiBhcyB0aGlzIGZpbGUuCiAgKi8KIAkkc3lzdGVtX3BhdGggPSAnc3lzdGVtJzsKQEAgLTIyMCwyOCArMjIwLDI4IEBACiAJCQkkYXBwbGljYXRpb25fZm9sZGVyID0gJF90ZW1wOwogCQl9CiAKLQkJZGVmaW5lKCdBUFBQQVRIJywgJGFwcGxpY2F0aW9uX2ZvbGRlci4nLycpOworCQlkZWZpbmUoJ0FQUFBBVEgnLCAkYXBwbGljYXRpb25fZm9sZGVyLkRJUkVDVE9SWV9TRVBBUkFUT1IpOwogCX0KIAllbHNlCiAJewotCQlpZiAoICEgaXNfZGlyKEJBU0VQQVRILiRhcHBsaWNhdGlvbl9mb2xkZXIuJy8nKSkKKwkJaWYgKCAhIGlzX2RpcihCQVNFUEFUSC4kYXBwbGljYXRpb25fZm9sZGVyLkRJUkVDVE9SWV9TRVBBUkFUT1IpKQogCQl7CiAJCQloZWFkZXIoJ0hUVFAvMS4xIDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlLicsIFRSVUUsIDUwMyk7CiAJCQllY2hvICdZb3VyIGFwcGxpY2F0aW9uIGZvbGRlciBwYXRoIGRvZXMgbm90IGFwcGVhciB0byBiZSBzZXQgY29ycmVjdGx5LiBQbGVhc2Ugb3BlbiB0aGUgZm9sbG93aW5nIGZpbGUgYW5kIGNvcnJlY3QgdGhpczogJy5TRUxGOwogCQkJZXhpdCgzKTsgLy8gRVhJVF8qIGNvbnN0YW50cyBub3QgeWV0IGRlZmluZWQ7IDMgaXMgRVhJVF9DT05GSUcuCiAJCX0KIAotCQlkZWZpbmUoJ0FQUFBBVEgnLCBCQVNFUEFUSC4kYXBwbGljYXRpb25fZm9sZGVyLicvJyk7CisJCWRlZmluZSgnQVBQUEFUSCcsIEJBU0VQQVRILiRhcHBsaWNhdGlvbl9mb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUik7CiAJfQogCiAJLy8gVGhlIHBhdGggdG8gdGhlICJ2aWV3cyIgZm9sZGVyCiAJaWYgKCAhIGlzX2Rpcigkdmlld19mb2xkZXIpKQogCXsKLQkJaWYgKCAhIGVtcHR5KCR2aWV3X2ZvbGRlcikgJiYgaXNfZGlyKEFQUFBBVEguJHZpZXdfZm9sZGVyLicvJykpCisJCWlmICggISBlbXB0eSgkdmlld19mb2xkZXIpICYmIGlzX2RpcihBUFBQQVRILiR2aWV3X2ZvbGRlci5ESVJFQ1RPUllfU0VQQVJBVE9SKSkKIAkJewogCQkJJHZpZXdfZm9sZGVyID0gQVBQUEFUSC4kdmlld19mb2xkZXI7CiAJCX0KLQkJZWxzZWlmICggISBpc19kaXIoQVBQUEFUSC4ndmlld3MvJykpCisJCWVsc2VpZiAoICEgaXNfZGlyKEFQUFBBVEguJ3ZpZXdzJy5ESVJFQ1RPUllfU0VQQVJBVE9SKSkKIAkJewogCQkJaGVhZGVyKCdIVFRQLzEuMSA1MDMgU2VydmljZSBVbmF2YWlsYWJsZS4nLCBUUlVFLCA1MDMpOwogCQkJZWNobyAnWW91ciB2aWV3IGZvbGRlciBwYXRoIGRvZXMgbm90IGFwcGVhciB0byBiZSBzZXQgY29ycmVjdGx5LiBQbGVhc2Ugb3BlbiB0aGUgZm9sbG93aW5nIGZpbGUgYW5kIGNvcnJlY3QgdGhpczogJy5TRUxGOwpAQCAtMjU1LDExICsyNTUsMTEgQEAKIAogCWlmICgoJF90ZW1wID0gcmVhbHBhdGgoJHZpZXdfZm9sZGVyKSkgIT09IEZBTFNFKQogCXsKLQkJJHZpZXdfZm9sZGVyID0gJF90ZW1wLicvJzsKKwkJJHZpZXdfZm9sZGVyID0gJF90ZW1wLkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAJfQogCWVsc2UKIAl7Ci0JCSR2aWV3X2ZvbGRlciA9IHJ0cmltKCR2aWV3X2ZvbGRlciwgJy8nKS4nLyc7CisJCSR2aWV3X2ZvbGRlciA9IHJ0cmltKCR2aWV3X2ZvbGRlciwgJy9cXCcpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAJfQogCiAJZGVmaW5lKCdWSUVXUEFUSCcsICR2aWV3X2ZvbGRlcik7CkBAIC0yNzQsNCArMjc0LDQgQEAKIHJlcXVpcmVfb25jZSBCQVNFUEFUSC4nY29yZS9Db2RlSWduaXRlci5waHAnOwogCiAvKiBFbmQgb2YgZmlsZSBpbmRleC5waHAgKi8KLS8qIExvY2F0aW9uOiAuL2luZGV4LnBocCAqLworLyogTG9jYXRpb246IC4vaW5kZXgucGhwICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVhZG1lLnJzdCBiL3JlYWRtZS5yc3QKaW5kZXggZDc2ODE2Mi4uYjQ5ODRlYSAxMDA2NDQKLS0tIGEvcmVhZG1lLnJzdAorKysgYi9yZWFkbWUucnN0CkBAIC0xNCw3ICsxNCw3IEBACiBSZWxlYXNlIEluZm9ybWF0aW9uCiAqKioqKioqKioqKioqKioqKioqCiAKLVRoaXMgcmVwbyBjb250YWlucyBpbiBkZXZlbG9wbWVudCBjb2RlIGZvciBmdXR1cmUgcmVsZWFzZXMuIFRvIGRvd25sb2FkIHRoZQorVGhpcyByZXBvIGNvbnRhaW5zIGluLWRldmVsb3BtZW50IGNvZGUgZm9yIGZ1dHVyZSByZWxlYXNlcy4gVG8gZG93bmxvYWQgdGhlCiBsYXRlc3Qgc3RhYmxlIHJlbGVhc2UgcGxlYXNlIHZpc2l0IHRoZSBgQ29kZUlnbml0ZXIgRG93bmxvYWRzCiA8aHR0cDovL2NvZGVpZ25pdGVyLmNvbS9kb3dubG9hZHMvPmBfIHBhZ2UuCiAKQEAgLTQ5LDkgKzQ5LDkgQEAKIFJlc291cmNlcwogKioqKioqKioqCiAKLS0gIGBVc2VyIEd1aWRlIDxodHRwOi8vY29kZWlnbml0ZXIuY29tL3VzZXJfZ3VpZGUvPmBfCi0tICBgQ29tbXVuaXR5IEZvcnVtcyA8aHR0cDovL2NvZGVpZ25pdGVyLmNvbS9mb3J1bXMvPmBfCi0tICBgQ29tbXVuaXR5IFdpa2kgPGh0dHA6Ly9jb2RlaWduaXRlci5jb20vd2lraS8+YF8KKy0gIGBVc2VyIEd1aWRlIDxodHRwOi8vZWxsaXNsYWIuY29tL2NvZGVpZ25pdGVyL3VzZXJfZ3VpZGUvPmBfCistICBgQ29tbXVuaXR5IEZvcnVtcyA8aHR0cDovL2VsbGlzbGFiLmNvbS9mb3J1bXMvPmBfCistICBgQ29tbXVuaXR5IFdpa2kgPGh0dHBzOi8vZ2l0aHViLmNvbS9FbGxpc0xhYi9Db2RlSWduaXRlci93aWtpLz5gXwogLSAgYENvbW11bml0eSBJUkMgPGh0dHA6Ly9lbGxpc2xhYi5jb20vY29kZWlnbml0ZXIvaXJjPmBfCiAKICoqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvQ29kZUlnbml0ZXIucGhwIGIvc3lzdGVtL2NvcmUvQ29kZUlnbml0ZXIucGhwCmluZGV4IGM2ODI2NjQuLjc0YTllYjAgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9jb3JlL0NvZGVJZ25pdGVyLnBocAorKysgYi9zeXN0ZW0vY29yZS9Db2RlSWduaXRlci5waHAKQEAgLTQ4LDYgKzQ4LDE4IEBACiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBMb2FkIHRoZSBmcmFtZXdvcmsgY29uc3RhbnRzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCWlmIChmaWxlX2V4aXN0cyhBUFBQQVRILidjb25maWcvJy5FTlZJUk9OTUVOVC4nL2NvbnN0YW50cy5waHAnKSkKKwl7CisJCXJlcXVpcmVfb25jZShBUFBQQVRILidjb25maWcvJy5FTlZJUk9OTUVOVC4nL2NvbnN0YW50cy5waHAnKTsKKwl9CisKKwlyZXF1aXJlX29uY2UoQVBQUEFUSC4nY29uZmlnL2NvbnN0YW50cy5waHAnKTsKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIExvYWQgdGhlIGdsb2JhbCBmdW5jdGlvbnMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCkBAIC01NSwyOSArNjcsMTQgQEAKIAogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIExvYWQgdGhlIGZyYW1ld29yayBjb25zdGFudHMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0JaWYgKGZpbGVfZXhpc3RzKEFQUFBBVEguJ2NvbmZpZy8nLkVOVklST05NRU5ULicvY29uc3RhbnRzLnBocCcpKQotCXsKLQkJcmVxdWlyZShBUFBQQVRILidjb25maWcvJy5FTlZJUk9OTUVOVC4nL2NvbnN0YW50cy5waHAnKTsKLQl9Ci0JZWxzZQotCXsKLQkJcmVxdWlyZShBUFBQQVRILidjb25maWcvY29uc3RhbnRzLnBocCcpOwotCX0KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIERlZmluZSBhIGN1c3RvbSBlcnJvciBoYW5kbGVyIHNvIHdlIGNhbiBsb2cgUEhQIGVycm9ycwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAlzZXRfZXJyb3JfaGFuZGxlcignX2V4Y2VwdGlvbl9oYW5kbGVyJyk7CisJcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oJ19zaHV0ZG93bl9oYW5kbGVyJyk7CiAKLQlpZiAoICEgaXNfcGhwKCc1LjQnKSkKLQl7Ci0JCUBpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsIDApOyAvLyBLaWxsIG1hZ2ljIHF1b3RlcwotCX0KKwkvLyBLaWxsIG1hZ2ljIHF1b3RlcworCWlzX3BocCgnNS40JykgT1IgQGluaV9zZXQoJ21hZ2ljX3F1b3Rlc19ydW50aW1lJywgMCk7CiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg4LDcgKzg1LDcgQEAKICAqIFRoZSBzdWJjbGFzcyBwcmVmaXggYWxsb3dzIENJIHRvIGtub3cgaWYgYSBjb3JlIGNsYXNzIGlzCiAgKiBiZWluZyBleHRlbmRlZCB2aWEgYSBsaWJyYXJ5IGluIHRoZSBsb2NhbCBhcHBsaWNhdGlvbgogICogImxpYnJhcmllcyIgZm9sZGVyLiBTaW5jZSBDSSBhbGxvd3MgY29uZmlnIGl0ZW1zIHRvIGJlCi0gKiBvdmVycmlkZW4gdmlhIGRhdGEgc2V0IGluIHRoZSBtYWluIGluZGV4LiBwaHAgZmlsZSwKKyAqIG92ZXJyaWRlbiB2aWEgZGF0YSBzZXQgaW4gdGhlIG1haW4gaW5kZXgucGhwIGZpbGUsCiAgKiBiZWZvcmUgcHJvY2VlZGluZyB3ZSBuZWVkIHRvIGtub3cgaWYgYSBzdWJjbGFzc19wcmVmaXgKICAqIG92ZXJyaWRlIGV4aXN0cy4gSWYgc28sIHdlIHdpbGwgc2V0IHRoaXMgdmFsdWUgbm93LAogICogYmVmb3JlIGFueSBjbGFzc2VzIGFyZSBsb2FkZWQKQEAgLTE2NiwxMiArMTYzLDYgQEAKICAqLwogCSRSVFIgPSYgbG9hZF9jbGFzcygnUm91dGVyJywgJ2NvcmUnKTsKIAotCS8vIFNldCBhbnkgcm91dGluZyBvdmVycmlkZXMgdGhhdCBtYXkgZXhpc3QgaW4gdGhlIG1haW4gaW5kZXggZmlsZQotCWlmIChpc3NldCgkcm91dGluZykpCi0JewotCQkkUlRSLT5fc2V0X292ZXJyaWRlcygkcm91dGluZyk7Ci0JfQotCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgSW5zdGFudGlhdGUgdGhlIG91dHB1dCBjbGFzcwpAQCAtMjE4LDcgKzIwOSw3IEBACiAgKgogICovCiAJLy8gTG9hZCB0aGUgYmFzZSBjb250cm9sbGVyIGNsYXNzCi0JcmVxdWlyZSBCQVNFUEFUSC4nY29yZS9Db250cm9sbGVyLnBocCc7CisJcmVxdWlyZV9vbmNlIEJBU0VQQVRILidjb3JlL0NvbnRyb2xsZXIucGhwJzsKIAogCS8qKgogCSAqIFJlZmVyZW5jZSB0byB0aGUgQ0lfQ29udHJvbGxlciBtZXRob2QuCkBAIC0yMzQsOTIgKzIyNSwxMTcgQEAKIAogCWlmIChmaWxlX2V4aXN0cyhBUFBQQVRILidjb3JlLycuJENGRy0+Y29uZmlnWydzdWJjbGFzc19wcmVmaXgnXS4nQ29udHJvbGxlci5waHAnKSkKIAl7Ci0JCXJlcXVpcmUgQVBQUEFUSC4nY29yZS8nLiRDRkctPmNvbmZpZ1snc3ViY2xhc3NfcHJlZml4J10uJ0NvbnRyb2xsZXIucGhwJzsKKwkJcmVxdWlyZV9vbmNlIEFQUFBBVEguJ2NvcmUvJy4kQ0ZHLT5jb25maWdbJ3N1YmNsYXNzX3ByZWZpeCddLidDb250cm9sbGVyLnBocCc7CiAJfQogCi0JLy8gTG9hZCB0aGUgbG9jYWwgYXBwbGljYXRpb24gY29udHJvbGxlcgotCS8vIE5vdGU6IFRoZSBSb3V0ZXIgY2xhc3MgYXV0b21hdGljYWxseSB2YWxpZGF0ZXMgdGhlIGNvbnRyb2xsZXIgcGF0aCB1c2luZyB0aGUgcm91dGVyLT5fdmFsaWRhdGVfcmVxdWVzdCgpLgotCS8vIElmIHRoaXMgaW5jbHVkZSBmYWlscyBpdCBtZWFucyB0aGF0IHRoZSBkZWZhdWx0IGNvbnRyb2xsZXIgaW4gdGhlIFJvdXRlcy5waHAgZmlsZSBpcyBub3QgcmVzb2x2aW5nIHRvIHNvbWV0aGluZyB2YWxpZC4KLQlpZiAoICEgZmlsZV9leGlzdHMoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kUlRSLT5kaXJlY3RvcnkuJFJUUi0+Y2xhc3MuJy5waHAnKSkKLQl7Ci0JCXNob3dfZXJyb3IoJ1VuYWJsZSB0byBsb2FkIHlvdXIgZGVmYXVsdCBjb250cm9sbGVyLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBpbiB5b3VyIFJvdXRlcy5waHAgZmlsZSBpcyB2YWxpZC4nKTsKLQl9Ci0KLQlpbmNsdWRlKEFQUFBBVEguJ2NvbnRyb2xsZXJzLycuJFJUUi0+ZGlyZWN0b3J5LiRSVFItPmNsYXNzLicucGhwJyk7Ci0KIAkvLyBTZXQgYSBtYXJrIHBvaW50IGZvciBiZW5jaG1hcmtpbmcKIAkkQk0tPm1hcmsoJ2xvYWRpbmdfdGltZTpfYmFzZV9jbGFzc2VzX2VuZCcpOwogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU2VjdXJpdHkgY2hlY2sKKyAqICBTYW5pdHkgY2hlY2tzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKiAgTm9uZSBvZiB0aGUgbWV0aG9kcyBpbiB0aGUgYXBwIGNvbnRyb2xsZXIgb3IgdGhlCi0gKiAgbG9hZGVyIGNsYXNzIGNhbiBiZSBjYWxsZWQgdmlhIHRoZSBVUkksIG5vciBjYW4KLSAqICBjb250cm9sbGVyIGZ1bmN0aW9ucyB0aGF0IGJlZ2luIHdpdGggYW4gdW5kZXJzY29yZS4KKyAqICBUaGUgUm91dGVyIGNsYXNzIGhhcyBhbHJlYWR5IHZhbGlkYXRlZCB0aGUgcmVxdWVzdCwKKyAqICBsZWF2aW5nIHVzIHdpdGggMyBvcHRpb25zIGhlcmU6CisgKgorICoJMSkgYW4gZW1wdHkgY2xhc3MgbmFtZSwgaWYgd2UgcmVhY2hlZCB0aGUgZGVmYXVsdAorICoJICAgY29udHJvbGxlciwgYnV0IGl0IGRpZG4ndCBleGlzdDsKKyAqCTIpIGEgcXVlcnkgc3RyaW5nIHdoaWNoIGRvZXNuJ3QgZ28gdGhyb3VnaCBhCisgKgkgICBmaWxlX2V4aXN0cygpIGNoZWNrCisgKgkzKSBhIHJlZ3VsYXIgcmVxdWVzdCBmb3IgYSBub24tZXhpc3RpbmcgcGFnZQorICoKKyAqICBXZSBoYW5kbGUgYWxsIG9mIHRoZXNlIGFzIGEgNDA0IGVycm9yLgorICoKKyAqICBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGUgbWV0aG9kcyBpbiB0aGUgYXBwIGNvbnRyb2xsZXIKKyAqICBvciB0aGUgbG9hZGVyIGNsYXNzIGNhbiBiZSBjYWxsZWQgdmlhIHRoZSBVUkksIG5vciBjYW4KKyAqICBjb250cm9sbGVyIG1ldGhvZHMgdGhhdCBiZWdpbiB3aXRoIGFuIHVuZGVyc2NvcmUuCiAgKi8KLQkkY2xhc3MJPSAkUlRSLT5jbGFzczsKLQkkbWV0aG9kCT0gJFJUUi0+bWV0aG9kOwogCi0JaWYgKCAhIGNsYXNzX2V4aXN0cygkY2xhc3MsIEZBTFNFKSBPUiAkbWV0aG9kWzBdID09PSAnXycgT1IgbWV0aG9kX2V4aXN0cygnQ0lfQ29udHJvbGxlcicsICRtZXRob2QpKQorCSRlNDA0ID0gRkFMU0U7CisJJGNsYXNzID0gdWNmaXJzdCgkUlRSLT5jbGFzcyk7CisJJG1ldGhvZCA9ICRSVFItPm1ldGhvZDsKKworCWlmIChlbXB0eSgkY2xhc3MpIE9SICEgZmlsZV9leGlzdHMoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kUlRSLT5kaXJlY3RvcnkuJGNsYXNzLicucGhwJykpCiAJewotCQlpZiAoICEgZW1wdHkoJFJUUi0+cm91dGVzWyc0MDRfb3ZlcnJpZGUnXSkpCi0JCXsKLQkJCWlmIChzc2NhbmYoJFJUUi0+cm91dGVzWyc0MDRfb3ZlcnJpZGUnXSwgJyVbXi9dLyVzJywgJGNsYXNzLCAkbWV0aG9kKSAhPT0gMikKLQkJCXsKLQkJCQkkbWV0aG9kID0gJ2luZGV4JzsKLQkJCX0KLQotCQkJaWYgKCAhIGNsYXNzX2V4aXN0cygkY2xhc3MsIEZBTFNFKSkKLQkJCXsKLQkJCQlpZiAoICEgZmlsZV9leGlzdHMoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kY2xhc3MuJy5waHAnKSkKLQkJCQl7Ci0JCQkJCXNob3dfNDA0KCRjbGFzcy4nLycuJG1ldGhvZCk7Ci0JCQkJfQotCi0JCQkJaW5jbHVkZV9vbmNlKEFQUFBBVEguJ2NvbnRyb2xsZXJzLycuJGNsYXNzLicucGhwJyk7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlzaG93XzQwNCgkY2xhc3MuJy8nLiRtZXRob2QpOwotCQl9Ci0JfQotCi0JaWYgKG1ldGhvZF9leGlzdHMoJGNsYXNzLCAnX3JlbWFwJykpCi0JewotCQkkcGFyYW1zID0gYXJyYXkoJG1ldGhvZCwgYXJyYXlfc2xpY2UoJFVSSS0+cnNlZ21lbnRzLCAyKSk7Ci0JCSRtZXRob2QgPSAnX3JlbWFwJzsKKwkJJGU0MDQgPSBUUlVFOwogCX0KIAllbHNlCiAJeworCQlyZXF1aXJlX29uY2UoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kUlRSLT5kaXJlY3RvcnkuJGNsYXNzLicucGhwJyk7CisKKwkJaWYgKCAhIGNsYXNzX2V4aXN0cygkY2xhc3MsIEZBTFNFKSBPUiAkbWV0aG9kWzBdID09PSAnXycgT1IgbWV0aG9kX2V4aXN0cygnQ0lfQ29udHJvbGxlcicsICRtZXRob2QpKQorCQl7CisJCQkkZTQwNCA9IFRSVUU7CisJCX0KKwkJZWxzZWlmIChtZXRob2RfZXhpc3RzKCRjbGFzcywgJ19yZW1hcCcpKQorCQl7CisJCQkkcGFyYW1zID0gYXJyYXkoJG1ldGhvZCwgYXJyYXlfc2xpY2UoJFVSSS0+cnNlZ21lbnRzLCAyKSk7CisJCQkkbWV0aG9kID0gJ19yZW1hcCc7CisJCX0KIAkJLy8gV0FSTklORzogSXQgYXBwZWFycyB0aGF0IHRoZXJlIGFyZSBpc3N1ZXMgd2l0aCBpc19jYWxsYWJsZSgpIGV2ZW4gaW4gUEhQIDUuMiEKIAkJLy8gRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZS9jaGFuZ2UgcmVxdWVzdHMgcmVsYXRlZCB0byBpdAogCQkvLyB0aGF0IG1ha2UgaXQgdW5yZWxpYWJsZSB0byB1c2UgaW4gdGhpcyBjb250ZXh0LiBQbGVhc2UsIERPIE5PVCBjaGFuZ2UgdGhpcwogCQkvLyB3b3JrLWFyb3VuZCB1bnRpbCBhIGJldHRlciBhbHRlcm5hdGl2ZSBpcyBhdmFpbGFibGUuCi0JCWlmICggISBpbl9hcnJheShzdHJ0b2xvd2VyKCRtZXRob2QpLCBhcnJheV9tYXAoJ3N0cnRvbG93ZXInLCBnZXRfY2xhc3NfbWV0aG9kcygkY2xhc3MpKSwgVFJVRSkpCisJCWVsc2VpZiAoICEgaW5fYXJyYXkoc3RydG9sb3dlcigkbWV0aG9kKSwgYXJyYXlfbWFwKCdzdHJ0b2xvd2VyJywgZ2V0X2NsYXNzX21ldGhvZHMoJGNsYXNzKSksIFRSVUUpKQogCQl7Ci0JCQlpZiAoZW1wdHkoJFJUUi0+cm91dGVzWyc0MDRfb3ZlcnJpZGUnXSkpCisJCQkkZTQwNCA9IFRSVUU7CisJCX0KKwl9CisKKwlpZiAoJGU0MDQpCisJeworCQlpZiAoICEgZW1wdHkoJFJUUi0+cm91dGVzWyc0MDRfb3ZlcnJpZGUnXSkpCisJCXsKKwkJCWlmIChzc2NhbmYoJFJUUi0+cm91dGVzWyc0MDRfb3ZlcnJpZGUnXSwgJyVbXi9dLyVzJywgJGVycm9yX2NsYXNzLCAkZXJyb3JfbWV0aG9kKSAhPT0gMikKIAkJCXsKLQkJCQlzaG93XzQwNCgkY2xhc3MuJy8nLiRtZXRob2QpOwotCQkJfQotCQkJZWxzZWlmIChzc2NhbmYoJFJUUi0+cm91dGVzWyc0MDRfb3ZlcnJpZGUnXSwgJyVbXi9dLyVzJywgJGNsYXNzLCAkbWV0aG9kKSAhPT0gMikKLQkJCXsKLQkJCQkkbWV0aG9kID0gJ2luZGV4JzsKKwkJCQkkZXJyb3JfbWV0aG9kID0gJ2luZGV4JzsKIAkJCX0KIAotCQkJaWYgKCAhIGNsYXNzX2V4aXN0cygkY2xhc3MsIEZBTFNFKSkKKwkJCSRlcnJvcl9jbGFzcyA9IHVjZmlyc3QoJGVycm9yX2NsYXNzKTsKKworCQkJaWYgKCAhIGNsYXNzX2V4aXN0cygkZXJyb3JfY2xhc3MsIEZBTFNFKSkKIAkJCXsKLQkJCQlpZiAoICEgZmlsZV9leGlzdHMoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kY2xhc3MuJy5waHAnKSkKKwkJCQlpZiAoZmlsZV9leGlzdHMoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kUlRSLT5kaXJlY3RvcnkuJGVycm9yX2NsYXNzLicucGhwJykpCiAJCQkJewotCQkJCQlzaG93XzQwNCgkY2xhc3MuJy8nLiRtZXRob2QpOworCQkJCQlyZXF1aXJlX29uY2UoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kUlRSLT5kaXJlY3RvcnkuJGVycm9yX2NsYXNzLicucGhwJyk7CisJCQkJCSRlNDA0ID0gISBjbGFzc19leGlzdHMoJGVycm9yX2NsYXNzLCBGQUxTRSk7CiAJCQkJfQotCi0JCQkJaW5jbHVkZV9vbmNlKEFQUFBBVEguJ2NvbnRyb2xsZXJzLycuJGNsYXNzLicucGhwJyk7CisJCQkJLy8gV2VyZSB3ZSBpbiBhIGRpcmVjdG9yeT8gSWYgc28sIGNoZWNrIGZvciBhIGdsb2JhbCBvdmVycmlkZQorCQkJCWVsc2VpZiAoICEgZW1wdHkoJFJUUi0+ZGlyZWN0b3J5KSAmJiBmaWxlX2V4aXN0cyhBUFBQQVRILidjb250cm9sbGVycy8nLiRlcnJvcl9jbGFzcy4nLnBocCcpKQorCQkJCXsKKwkJCQkJcmVxdWlyZV9vbmNlKEFQUFBBVEguJ2NvbnRyb2xsZXJzLycuJGVycm9yX2NsYXNzLicucGhwJyk7CisJCQkJCWlmICgoJGU0MDQgPSAhIGNsYXNzX2V4aXN0cygkZXJyb3JfY2xhc3MsIEZBTFNFKSkgPT09IEZBTFNFKQorCQkJCQl7CisJCQkJCQkkUlRSLT5kaXJlY3RvcnkgPSAnJzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkZTQwNCA9IEZBTFNFOwogCQkJfQogCQl9CiAKKwkJLy8gRGlkIHdlIHJlc2V0IHRoZSAkZTQwNCBmbGFnPyBJZiBzbywgc2V0IHRoZSByc2VnbWVudHMsIHN0YXJ0aW5nIGZyb20gaW5kZXggMQorCQlpZiAoICEgJGU0MDQpCisJCXsKKwkJCSRjbGFzcyA9ICRlcnJvcl9jbGFzczsKKwkJCSRtZXRob2QgPSAkZXJyb3JfbWV0aG9kOworCisJCQkkVVJJLT5yc2VnbWVudHMgPSBhcnJheSgKKwkJCQkxID0+ICRjbGFzcywKKwkJCQkyID0+ICRtZXRob2QKKwkJCSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzaG93XzQwNCgkUlRSLT5kaXJlY3RvcnkuJGNsYXNzLicvJy4kbWV0aG9kKTsKKwkJfQorCX0KKworCWlmICgkbWV0aG9kICE9PSAnX3JlbWFwJykKKwl7CiAJCSRwYXJhbXMgPSBhcnJheV9zbGljZSgkVVJJLT5yc2VnbWVudHMsIDIpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvQ29tbW9uLnBocCBiL3N5c3RlbS9jb3JlL0NvbW1vbi5waHAKaW5kZXggYjk1YTA1ZC4uMDBlMzAzMCAxMDA2NDQKLS0tIGEvc3lzdGVtL2NvcmUvQ29tbW9uLnBocAorKysgYi9zeXN0ZW0vY29yZS9Db21tb24ucGhwCkBAIC04Miw3ICs4Miw3IEBACiAJZnVuY3Rpb24gaXNfcmVhbGx5X3dyaXRhYmxlKCRmaWxlKQogCXsKIAkJLy8gSWYgd2UncmUgb24gYSBVbml4IHNlcnZlciB3aXRoIHNhZmVfbW9kZSBvZmYgd2UgY2FsbCBpc193cml0YWJsZQotCQlpZiAoRElSRUNUT1JZX1NFUEFSQVRPUiA9PT0gJy8nICYmIChib29sKSBAaW5pX2dldCgnc2FmZV9tb2RlJykgPT09IEZBTFNFKQorCQlpZiAoRElSRUNUT1JZX1NFUEFSQVRPUiA9PT0gJy8nICYmIChpc19waHAoJzUuNCcpIE9SIChib29sKSBAaW5pX2dldCgnc2FmZV9tb2RlJykgPT09IEZBTFNFKSkKIAkJewogCQkJcmV0dXJuIGlzX3dyaXRhYmxlKCRmaWxlKTsKIAkJfQpAQCAtMjI0LDU2ICsyMjQsNTEgQEAKIAkgKiBAcGFyYW0JYXJyYXkKIAkgKiBAcmV0dXJuCWFycmF5CiAJICovCi0JZnVuY3Rpb24gJmdldF9jb25maWcoJHJlcGxhY2UgPSBhcnJheSgpKQorCWZ1bmN0aW9uICZnZXRfY29uZmlnKEFycmF5ICRyZXBsYWNlID0gYXJyYXkoKSkKIAl7CiAJCXN0YXRpYyAkX2NvbmZpZzsKIAotCQlpZiAoaXNzZXQoJF9jb25maWcpKQorCQlpZiAoZW1wdHkoJF9jb25maWcpKQogCQl7Ci0JCQlyZXR1cm4gJF9jb25maWdbMF07Ci0JCX0KLQotCQkkZmlsZV9wYXRoID0gQVBQUEFUSC4nY29uZmlnL2NvbmZpZy5waHAnOwotCQkkZm91bmQgPSBGQUxTRTsKLQkJaWYgKGZpbGVfZXhpc3RzKCRmaWxlX3BhdGgpKQotCQl7Ci0JCQkkZm91bmQgPSBUUlVFOwotCQkJcmVxdWlyZSgkZmlsZV9wYXRoKTsKLQkJfQotCi0JCS8vIElzIHRoZSBjb25maWcgZmlsZSBpbiB0aGUgZW52aXJvbm1lbnQgZm9sZGVyPwotCQlpZiAoZmlsZV9leGlzdHMoJGZpbGVfcGF0aCA9IEFQUFBBVEguJ2NvbmZpZy8nLkVOVklST05NRU5ULicvY29uZmlnLnBocCcpKQotCQl7Ci0JCQlyZXF1aXJlKCRmaWxlX3BhdGgpOwotCQl9Ci0JCWVsc2VpZiAoICEgJGZvdW5kKQotCQl7Ci0JCQlzZXRfc3RhdHVzX2hlYWRlcig1MDMpOwotCQkJZWNobyAnVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2VzIG5vdCBleGlzdC4nOwotCQkJZXhpdChFWElUX0NPTkZJRyk7Ci0JCX0KLQotCQkvLyBEb2VzIHRoZSAkY29uZmlnIGFycmF5IGV4aXN0IGluIHRoZSBmaWxlPwotCQlpZiAoICEgaXNzZXQoJGNvbmZpZykgT1IgISBpc19hcnJheSgkY29uZmlnKSkKLQkJewotCQkJc2V0X3N0YXR1c19oZWFkZXIoNTAzKTsKLQkJCWVjaG8gJ1lvdXIgY29uZmlnIGZpbGUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGZvcm1hdHRlZCBjb3JyZWN0bHkuJzsKLQkJCWV4aXQoRVhJVF9DT05GSUcpOwotCQl9Ci0KLQkJLy8gQXJlIGFueSB2YWx1ZXMgYmVpbmcgZHluYW1pY2FsbHkgcmVwbGFjZWQ/Ci0JCWlmIChjb3VudCgkcmVwbGFjZSkgPiAwKQotCQl7Ci0JCQlmb3JlYWNoICgkcmVwbGFjZSBhcyAka2V5ID0+ICR2YWwpCisJCQkkZmlsZV9wYXRoID0gQVBQUEFUSC4nY29uZmlnL2NvbmZpZy5waHAnOworCQkJJGZvdW5kID0gRkFMU0U7CisJCQlpZiAoZmlsZV9leGlzdHMoJGZpbGVfcGF0aCkpCiAJCQl7Ci0JCQkJaWYgKGlzc2V0KCRjb25maWdbJGtleV0pKQotCQkJCXsKLQkJCQkJJGNvbmZpZ1ska2V5XSA9ICR2YWw7Ci0JCQkJfQorCQkJCSRmb3VuZCA9IFRSVUU7CisJCQkJcmVxdWlyZSgkZmlsZV9wYXRoKTsKIAkJCX0KKworCQkJLy8gSXMgdGhlIGNvbmZpZyBmaWxlIGluIHRoZSBlbnZpcm9ubWVudCBmb2xkZXI/CisJCQlpZiAoZmlsZV9leGlzdHMoJGZpbGVfcGF0aCA9IEFQUFBBVEguJ2NvbmZpZy8nLkVOVklST05NRU5ULicvY29uZmlnLnBocCcpKQorCQkJeworCQkJCXJlcXVpcmUoJGZpbGVfcGF0aCk7CisJCQl9CisJCQllbHNlaWYgKCAhICRmb3VuZCkKKwkJCXsKKwkJCQlzZXRfc3RhdHVzX2hlYWRlcig1MDMpOworCQkJCWVjaG8gJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgZG9lcyBub3QgZXhpc3QuJzsKKwkJCQlleGl0KEVYSVRfQ09ORklHKTsKKwkJCX0KKworCQkJLy8gRG9lcyB0aGUgJGNvbmZpZyBhcnJheSBleGlzdCBpbiB0aGUgZmlsZT8KKwkJCWlmICggISBpc3NldCgkY29uZmlnKSBPUiAhIGlzX2FycmF5KCRjb25maWcpKQorCQkJeworCQkJCXNldF9zdGF0dXNfaGVhZGVyKDUwMyk7CisJCQkJZWNobyAnWW91ciBjb25maWcgZmlsZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgZm9ybWF0dGVkIGNvcnJlY3RseS4nOworCQkJCWV4aXQoRVhJVF9DT05GSUcpOworCQkJfQorCisJCQkvLyByZWZlcmVuY2VzIGNhbm5vdCBiZSBkaXJlY3RseSBhc3NpZ25lZCB0byBzdGF0aWMgdmFyaWFibGVzLCBzbyB3ZSB1c2UgYW4gYXJyYXkKKwkJCSRfY29uZmlnWzBdID0mICRjb25maWc7CiAJCX0KIAotCQlyZXR1cm4gJF9jb25maWdbMF0gPSYgJGNvbmZpZzsKKwkJLy8gQXJlIGFueSB2YWx1ZXMgYmVpbmcgZHluYW1pY2FsbHkgYWRkZWQgb3IgcmVwbGFjZWQ/CisJCWZvcmVhY2ggKCRyZXBsYWNlIGFzICRrZXkgPT4gJHZhbCkKKwkJeworCQkJJF9jb25maWdbMF1bJGtleV0gPSAkdmFsOworCQl9CisKKwkJcmV0dXJuICRfY29uZmlnWzBdOwogCX0KIH0KIApAQCAtMzYwLDYgKzM1NSwyNCBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAoraWYgKCAhIGZ1bmN0aW9uX2V4aXN0cygnaXNfY2xpJykpCit7CisKKwkvKioKKwkgKiBJcyBDTEk/CisJICoKKwkgKiBUZXN0IHRvIHNlZSBpZiBhIHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCSAqCisJICogQHJldHVybiAJYm9vbAorCSAqLworCWZ1bmN0aW9uIGlzX2NsaSgpCisJeworCQlyZXR1cm4gKFBIUF9TQVBJID09PSAnY2xpJyBPUiBkZWZpbmVkKCdTVERJTicpKTsKKwl9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCdzaG93X2Vycm9yJykpCiB7CiAJLyoqCkBAIC00MzQsMjkgKzQ0NywxOSBAQAogCSAqCiAJICogQHBhcmFtCXN0cmluZwl0aGUgZXJyb3IgbGV2ZWw6ICdlcnJvcicsICdkZWJ1Zycgb3IgJ2luZm8nCiAJICogQHBhcmFtCXN0cmluZwl0aGUgZXJyb3IgbWVzc2FnZQotCSAqIEBwYXJhbQlib29sCXdoZXRoZXIgdGhlIGVycm9yIGlzIGEgbmF0aXZlIFBIUCBlcnJvcgogCSAqIEByZXR1cm4Jdm9pZAogCSAqLwotCWZ1bmN0aW9uIGxvZ19tZXNzYWdlKCRsZXZlbCwgJG1lc3NhZ2UsICRwaHBfZXJyb3IgPSBGQUxTRSkKKwlmdW5jdGlvbiBsb2dfbWVzc2FnZSgkbGV2ZWwsICRtZXNzYWdlKQogCXsKLQkJc3RhdGljICRfbG9nLCAkX2xvZ190aHJlc2hvbGQ7Ci0KLQkJaWYgKCRfbG9nX3RocmVzaG9sZCA9PT0gTlVMTCkKLQkJewotCQkJJF9sb2dfdGhyZXNob2xkID0gY29uZmlnX2l0ZW0oJ2xvZ190aHJlc2hvbGQnKTsKLQkJfQotCi0JCWlmICgkX2xvZ190aHJlc2hvbGQgPT09IDApCi0JCXsKLQkJCXJldHVybjsKLQkJfQorCQlzdGF0aWMgJF9sb2c7CiAKIAkJaWYgKCRfbG9nID09PSBOVUxMKQogCQl7Ci0JCQkkX2xvZyA9JiBsb2FkX2NsYXNzKCdMb2cnLCAnY29yZScpOworCQkJLy8gcmVmZXJlbmNlcyBjYW5ub3QgYmUgZGlyZWN0bHkgYXNzaWduZWQgdG8gc3RhdGljIHZhcmlhYmxlcywgc28gd2UgdXNlIGFuIGFycmF5CisJCQkkX2xvZ1swXSA9JiBsb2FkX2NsYXNzKCdMb2cnLCAnY29yZScpOwogCQl9CiAKLQkJJF9sb2ctPndyaXRlX2xvZygkbGV2ZWwsICRtZXNzYWdlLCAkcGhwX2Vycm9yKTsKKwkJJF9sb2dbMF0tPndyaXRlX2xvZygkbGV2ZWwsICRtZXNzYWdlKTsKIAl9CiB9CiAKQEAgLTUzOCw3ICs1NDEsNyBAQAogCiAJCSRzZXJ2ZXJfcHJvdG9jb2wgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10pID8gJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddIDogRkFMU0U7CiAKLQkJaWYgKHN0cnBvcyhwaHBfc2FwaV9uYW1lKCksICdjZ2knKSA9PT0gMCkKKwkJaWYgKHN0cnBvcyhQSFBfU0FQSSwgJ2NnaScpID09PSAwKQogCQl7CiAJCQloZWFkZXIoJ1N0YXR1czogJy4kY29kZS4nICcuJHRleHQsIFRSVUUpOwogCQl9CkBAIC01NTYsMjIgKzU1OSwzNSBAQAogCS8qKgogCSAqIEV4Y2VwdGlvbiBIYW5kbGVyCiAJICoKLQkgKiBUaGlzIGlzIHRoZSBjdXN0b20gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBpcyBkZWNsYWlyZWQgYXQgdGhlIHRvcAotCSAqIG9mIENvZGVpZ25pdGVyLnBocC4gVGhlIG1haW4gcmVhc29uIHdlIHVzZSB0aGlzIGlzIHRvIHBlcm1pdAorCSAqIFRoaXMgaXMgdGhlIGN1c3RvbSBleGNlcHRpb24gaGFuZGxlciB0aGF0IGlzIGRlY2xhcmVkIGF0IHRoZSB0b3AKKwkgKiBvZiBDb2RlSWduaXRlci5waHAuIFRoZSBtYWluIHJlYXNvbiB3ZSB1c2UgdGhpcyBpcyB0byBwZXJtaXQKIAkgKiBQSFAgZXJyb3JzIHRvIGJlIGxvZ2dlZCBpbiBvdXIgb3duIGxvZyBmaWxlcyBzaW5jZSB0aGUgdXNlciBtYXkKIAkgKiBub3QgaGF2ZSBhY2Nlc3MgdG8gc2VydmVyIGxvZ3MuIFNpbmNlIHRoaXMgZnVuY3Rpb24KIAkgKiBlZmZlY3RpdmVseSBpbnRlcmNlcHRzIFBIUCBlcnJvcnMsIGhvd2V2ZXIsIHdlIGFsc28gbmVlZAogCSAqIHRvIGRpc3BsYXkgZXJyb3JzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGVycm9yX3JlcG9ydGluZyBsZXZlbC4KIAkgKiBXZSBkbyB0aGF0IHdpdGggdGhlIHVzZSBvZiBhIFBIUCBlcnJvciB0ZW1wbGF0ZS4KIAkgKgotCSAqIEBwYXJhbQlpbnQKLQkgKiBAcGFyYW0Jc3RyaW5nCi0JICogQHBhcmFtCXN0cmluZwotCSAqIEBwYXJhbQlpbnQKKwkgKiBAcGFyYW0JaW50CSRzZXZlcml0eQorCSAqIEBwYXJhbQlzdHJpbmcJJG1lc3NhZ2UKKwkgKiBAcGFyYW0Jc3RyaW5nCSRmaWxlcGF0aAorCSAqIEBwYXJhbQlpbnQJJGxpbmUKIAkgKiBAcmV0dXJuCXZvaWQKIAkgKi8KIAlmdW5jdGlvbiBfZXhjZXB0aW9uX2hhbmRsZXIoJHNldmVyaXR5LCAkbWVzc2FnZSwgJGZpbGVwYXRoLCAkbGluZSkKIAl7CisJCSRpc19lcnJvciA9ICgoKEVfRVJST1IgfCBFX0NPTVBJTEVfRVJST1IgfCBFX0NPUkVfRVJST1IgfCBFX1VTRVJfRVJST1IpICYgJHNldmVyaXR5KSA9PT0gJHNldmVyaXR5KTsKKworCQkvLyBXaGVuIGFuIGVycm9yIG9jY3VycmVkLCBzZXQgdGhlIHN0YXR1cyBoZWFkZXIgdG8gJzUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InCisJCS8vIHRvIGluZGljYXRlIHRvIHRoZSBjbGllbnQgc29tZXRoaW5nIHdlbnQgd3JvbmcuCisJCS8vIFRoaXMgY2FuJ3QgYmUgZG9uZSB3aXRoaW4gdGhlICRfZXJyb3ItPnNob3dfcGhwX2Vycm9yIG1ldGhvZCBiZWNhdXNlCisJCS8vIGl0IGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIGRpc3BsYXlfZXJyb3JzIGZsYWcgaXMgc2V0ICh3aGljaCBpc24ndCB1c3VhbGx5CisJCS8vIHRoZSBjYXNlIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCkgb3Igd2hlbiBlcnJvcnMgYXJlIGlnbm9yZWQgYmVjYXVzZQorCQkvLyB0aGV5IGFyZSBhYm92ZSB0aGUgZXJyb3JfcmVwb3J0aW5nIHRocmVzaG9sZC4KKwkJaWYgKCRpc19lcnJvcikKKwkJeworCQkJc2V0X3N0YXR1c19oZWFkZXIoNTAwKTsKKwkJfQorCiAJCSRfZXJyb3IgPSYgbG9hZF9jbGFzcygnRXhjZXB0aW9ucycsICdjb3JlJyk7CiAKIAkJLy8gU2hvdWxkIHdlIGlnbm9yZSB0aGUgZXJyb3I/IFdlJ2xsIGdldCB0aGUgY3VycmVudCBlcnJvcl9yZXBvcnRpbmcKQEAgLTU4OCw2ICs2MDQsNDIgQEAKIAkJfQogCiAJCSRfZXJyb3ItPmxvZ19leGNlcHRpb24oJHNldmVyaXR5LCAkbWVzc2FnZSwgJGZpbGVwYXRoLCAkbGluZSk7CisKKwkJLy8gSWYgdGhlIGVycm9yIGlzIGZhdGFsLCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzY3JpcHQgc2hvdWxkIGJlIHN0b3BwZWQgYmVjYXVzZQorCQkvLyBlcnJvcnMgY2FuJ3QgYmUgcmVjb3ZlcmVkIGZyb20uIEhhbHRpbmcgdGhlIHNjcmlwdCBjb25mb3JtcyB3aXRoIFBIUCdzCisJCS8vIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcuIFNlZSBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Vycm9yZnVuYy5jb25zdGFudHMucGhwCisJCWlmICgkaXNfZXJyb3IpCisJCXsKKwkJCWV4aXQoRVhJVF9FUlJPUik7CisJCX0KKwl9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCdfc2h1dGRvd25faGFuZGxlcicpKQoreworCS8qKgorCSAqIFNodXRkb3duIEhhbmRsZXIKKwkgKgorCSAqIFRoaXMgaXMgdGhlIHNodXRkb3duIGhhbmRsZXIgdGhhdCBpcyBkZWNsYXJlZCBhdCB0aGUgdG9wCisJICogb2YgQ29kZUlnbml0ZXIucGhwLiBUaGUgbWFpbiByZWFzb24gd2UgdXNlIHRoaXMgaXMgdG8gc2ltdWxhdGUKKwkgKiBhIGNvbXBsZXRlIGN1c3RvbSBleGNlcHRpb24gaGFuZGxlci4KKwkgKgorCSAqIEVfU1RSSUNUIGlzIHB1cnBvc2l2bHkgbmVnbGVjdGVkIGJlY2F1c2Ugc3VjaCBldmVudHMgbWF5IGhhdmUKKwkgKiBiZWVuIGNhdWdodC4gRHVwbGljYXRpb24gb3Igbm9uZT8gTm9uZSBpcyBwcmVmZXJyZWQgZm9yIG5vdy4KKwkgKgorCSAqIEBsaW5rCWh0dHA6Ly9pbnNvbWFuaWMubWUudWsvcG9zdC8yMjk4NTEwNzMvcGhwLXRyaWNrLWNhdGNoaW5nLWZhdGFsLWVycm9ycy1lLWVycm9yLXdpdGgtYQorCSAqIEByZXR1cm4Jdm9pZAorCSAqLworCWZ1bmN0aW9uIF9zaHV0ZG93bl9oYW5kbGVyKCkKKwl7CisJCSRsYXN0X2Vycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKKwkJaWYgKGlzc2V0KCRsYXN0X2Vycm9yKSAmJgorCQkJKCRsYXN0X2Vycm9yWyd0eXBlJ10gJiAoRV9FUlJPUiB8IEVfUEFSU0UgfCBFX0NPUkVfRVJST1IgfCBFX0NPUkVfV0FSTklORyB8IEVfQ09NUElMRV9FUlJPUiB8IEVfQ09NUElMRV9XQVJOSU5HKSkpCisJCXsKKwkJCV9leGNlcHRpb25faGFuZGxlcigkbGFzdF9lcnJvclsndHlwZSddLCAkbGFzdF9lcnJvclsnbWVzc2FnZSddLCAkbGFzdF9lcnJvclsnZmlsZSddLCAkbGFzdF9lcnJvclsnbGluZSddKTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvQ29uZmlnLnBocCBiL3N5c3RlbS9jb3JlL0NvbmZpZy5waHAKaW5kZXggN2U2NDQ0NC4uYTBlODMwYSAxMDA2NDQKLS0tIGEvc3lzdGVtL2NvcmUvQ29uZmlnLnBocAorKysgYi9zeXN0ZW0vY29yZS9Db25maWcucGhwCkBAIC0xODQsMTYgKzE4NCwxNiBAQAogCSAqCiAJICogQHBhcmFtCXN0cmluZwkkaXRlbQlDb25maWcgaXRlbSBuYW1lCiAJICogQHBhcmFtCXN0cmluZwkkaW5kZXgJSW5kZXggbmFtZQotCSAqIEByZXR1cm4Jc3RyaW5nfGJvb2wJVGhlIGNvbmZpZ3VyYXRpb24gaXRlbSBvciBGQUxTRSBvbiBmYWlsdXJlCisJICogQHJldHVybglzdHJpbmd8bnVsbAlUaGUgY29uZmlndXJhdGlvbiBpdGVtIG9yIE5VTEwgaWYgdGhlIGl0ZW0gZG9lc24ndCBleGlzdAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBpdGVtKCRpdGVtLCAkaW5kZXggPSAnJykKIAl7CiAJCWlmICgkaW5kZXggPT0gJycpCiAJCXsKLQkJCXJldHVybiBpc3NldCgkdGhpcy0+Y29uZmlnWyRpdGVtXSkgPyAkdGhpcy0+Y29uZmlnWyRpdGVtXSA6IEZBTFNFOworCQkJcmV0dXJuIGlzc2V0KCR0aGlzLT5jb25maWdbJGl0ZW1dKSA/ICR0aGlzLT5jb25maWdbJGl0ZW1dIDogTlVMTDsKIAkJfQogCi0JCXJldHVybiBpc3NldCgkdGhpcy0+Y29uZmlnWyRpbmRleF0sICR0aGlzLT5jb25maWdbJGluZGV4XVskaXRlbV0pID8gJHRoaXMtPmNvbmZpZ1skaW5kZXhdWyRpdGVtXSA6IEZBTFNFOworCQlyZXR1cm4gaXNzZXQoJHRoaXMtPmNvbmZpZ1skaW5kZXhdLCAkdGhpcy0+Y29uZmlnWyRpbmRleF1bJGl0ZW1dKSA/ICR0aGlzLT5jb25maWdbJGluZGV4XVskaXRlbV0gOiBOVUxMOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDIsMTMgKzIwMiwxMyBAQAogCSAqIEZldGNoIGEgY29uZmlnIGZpbGUgaXRlbSB3aXRoIHNsYXNoIGFwcGVuZGVkIChpZiBub3QgZW1wdHkpCiAJICoKIAkgKiBAcGFyYW0Jc3RyaW5nCQkkaXRlbQlDb25maWcgaXRlbSBuYW1lCi0JICogQHJldHVybglzdHJpbmd8Ym9vbAlUaGUgY29uZmlndXJhdGlvbiBpdGVtIG9yIEZBTFNFIG9uIGZhaWx1cmUKKwkgKiBAcmV0dXJuCXN0cmluZ3xudWxsCVRoZSBjb25maWd1cmF0aW9uIGl0ZW0gb3IgTlVMTCBpZiB0aGUgaXRlbSBkb2Vzbid0IGV4aXN0CiAJICovCiAJcHVibGljIGZ1bmN0aW9uIHNsYXNoX2l0ZW0oJGl0ZW0pCiAJewogCQlpZiAoICEgaXNzZXQoJHRoaXMtPmNvbmZpZ1skaXRlbV0pKQogCQl7Ci0JCQlyZXR1cm4gRkFMU0U7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQllbHNlaWYgKHRyaW0oJHRoaXMtPmNvbmZpZ1skaXRlbV0pID09PSAnJykKIAkJewpAQCAtMjI4LDEzICsyMjgsMjEgQEAKIAkgKiBAdXNlcwlDSV9Db25maWc6Ol91cmlfc3RyaW5nKCkKIAkgKgogCSAqIEBwYXJhbQlzdHJpbmd8c3RyaW5nW10JJHVyaQlVUkkgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHNlZ21lbnRzCisJICogQHBhcmFtCXN0cmluZwkkcHJvdG9jb2wKIAkgKiBAcmV0dXJuCXN0cmluZwogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBzaXRlX3VybCgkdXJpID0gJycpCisJcHVibGljIGZ1bmN0aW9uIHNpdGVfdXJsKCR1cmkgPSAnJywgJHByb3RvY29sID0gTlVMTCkKIAl7CisJCSRiYXNlX3VybCA9ICR0aGlzLT5zbGFzaF9pdGVtKCdiYXNlX3VybCcpOworCisJCWlmIChpc3NldCgkcHJvdG9jb2wpKQorCQl7CisJCQkkYmFzZV91cmwgPSAkcHJvdG9jb2wuc3Vic3RyKCRiYXNlX3VybCwgc3RycG9zKCRiYXNlX3VybCwgJzovLycpKTsKKwkJfQorCiAJCWlmIChlbXB0eSgkdXJpKSkKIAkJewotCQkJcmV0dXJuICR0aGlzLT5zbGFzaF9pdGVtKCdiYXNlX3VybCcpLiR0aGlzLT5pdGVtKCdpbmRleF9wYWdlJyk7CisJCQlyZXR1cm4gJGJhc2VfdXJsLiR0aGlzLT5pdGVtKCdpbmRleF9wYWdlJyk7CiAJCX0KIAogCQkkdXJpID0gJHRoaXMtPl91cmlfc3RyaW5nKCR1cmkpOwpAQCAtMjU1LDE0ICsyNjMsMTQgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCXJldHVybiAkdGhpcy0+c2xhc2hfaXRlbSgnYmFzZV91cmwnKS4kdGhpcy0+c2xhc2hfaXRlbSgnaW5kZXhfcGFnZScpLiR1cmk7CisJCQlyZXR1cm4gJGJhc2VfdXJsLiR0aGlzLT5zbGFzaF9pdGVtKCdpbmRleF9wYWdlJykuJHVyaTsKIAkJfQogCQllbHNlaWYgKHN0cnBvcygkdXJpLCAnPycpID09PSBGQUxTRSkKIAkJewogCQkJJHVyaSA9ICc/Jy4kdXJpOwogCQl9CiAKLQkJcmV0dXJuICR0aGlzLT5zbGFzaF9pdGVtKCdiYXNlX3VybCcpLiR0aGlzLT5pdGVtKCdpbmRleF9wYWdlJykuJHVyaTsKKwkJcmV0dXJuICRiYXNlX3VybC4kdGhpcy0+aXRlbSgnaW5kZXhfcGFnZScpLiR1cmk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjc1LDExICsyODMsMTkgQEAKIAkgKiBAdXNlcwlDSV9Db25maWc6Ol91cmlfc3RyaW5nKCkKIAkgKgogCSAqIEBwYXJhbQlzdHJpbmd8c3RyaW5nW10JJHVyaQlVUkkgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHNlZ21lbnRzCisJICogQHBhcmFtCXN0cmluZwkkcHJvdG9jb2wKIAkgKiBAcmV0dXJuCXN0cmluZwogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBiYXNlX3VybCgkdXJpID0gJycpCisJcHVibGljIGZ1bmN0aW9uIGJhc2VfdXJsKCR1cmkgPSAnJywgJHByb3RvY29sID0gTlVMTCkKIAl7Ci0JCXJldHVybiAkdGhpcy0+c2xhc2hfaXRlbSgnYmFzZV91cmwnKS5sdHJpbSgkdGhpcy0+X3VyaV9zdHJpbmcoJHVyaSksICcvJyk7CisJCSRiYXNlX3VybCA9ICR0aGlzLT5zbGFzaF9pdGVtKCdiYXNlX3VybCcpOworCisJCWlmIChpc3NldCgkcHJvdG9jb2wpKQorCQl7CisJCQkkYmFzZV91cmwgPSAkcHJvdG9jb2wuc3Vic3RyKCRiYXNlX3VybCwgc3RycG9zKCRiYXNlX3VybCwgJzovLycpKTsKKwkJfQorCisJCXJldHVybiAkYmFzZV91cmwubHRyaW0oJHRoaXMtPl91cmlfc3RyaW5nKCR1cmkpLCAnLycpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3N5c3RlbS9jb3JlL0V4Y2VwdGlvbnMucGhwIGIvc3lzdGVtL2NvcmUvRXhjZXB0aW9ucy5waHAKaW5kZXggOWM2OGQwNi4uODA5ZGMwMiAxMDA2NDQKLS0tIGEvc3lzdGVtL2NvcmUvRXhjZXB0aW9ucy5waHAKKysrIGIvc3lzdGVtL2NvcmUvRXhjZXB0aW9ucy5waHAKQEAgLTkxLDcgKzkxLDcgQEAKIAlwdWJsaWMgZnVuY3Rpb24gbG9nX2V4Y2VwdGlvbigkc2V2ZXJpdHksICRtZXNzYWdlLCAkZmlsZXBhdGgsICRsaW5lKQogCXsKIAkJJHNldmVyaXR5ID0gaXNzZXQoJHRoaXMtPmxldmVsc1skc2V2ZXJpdHldKSA/ICR0aGlzLT5sZXZlbHNbJHNldmVyaXR5XSA6ICRzZXZlcml0eTsKLQkJbG9nX21lc3NhZ2UoJ2Vycm9yJywgJ1NldmVyaXR5OiAnLiRzZXZlcml0eS4nICAtLT4gJy4kbWVzc2FnZS4gJyAnLiRmaWxlcGF0aC4nICcuJGxpbmUsIFRSVUUpOworCQlsb2dfbWVzc2FnZSgnZXJyb3InLCAnU2V2ZXJpdHk6ICcuJHNldmVyaXR5LicgLS0+ICcuJG1lc3NhZ2UuJyAnLiRmaWxlcGF0aC4nICcuJGxpbmUpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDcsMTMgKzEwNywyMSBAQAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBzaG93XzQwNCgkcGFnZSA9ICcnLCAkbG9nX2Vycm9yID0gVFJVRSkKIAl7Ci0JCSRoZWFkaW5nID0gJzQwNCBQYWdlIE5vdCBGb3VuZCc7Ci0JCSRtZXNzYWdlID0gJ1RoZSBwYWdlIHlvdSByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC4nOworCQlpZiAoaXNfY2xpKCkpCisJCXsKKwkJCSRoZWFkaW5nID0gJ05vdCBGb3VuZCc7CisJCQkkbWVzc2FnZSA9ICdUaGUgY29udHJvbGxlci9tZXRob2QgcGFpciB5b3UgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQuJzsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRoZWFkaW5nID0gJzQwNCBQYWdlIE5vdCBGb3VuZCc7CisJCQkkbWVzc2FnZSA9ICdUaGUgcGFnZSB5b3UgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQuJzsKKwkJfQogCiAJCS8vIEJ5IGRlZmF1bHQgd2UgbG9nIHRoaXMsIGJ1dCBhbGxvdyBhIGRldiB0byBza2lwIGl0CiAJCWlmICgkbG9nX2Vycm9yKQogCQl7Ci0JCQlsb2dfbWVzc2FnZSgnZXJyb3InLCAnNDA0IFBhZ2UgTm90IEZvdW5kIC0tPiAnLiRwYWdlKTsKKwkJCWxvZ19tZXNzYWdlKCdlcnJvcicsICRoZWFkaW5nLic6ICcuJHBhZ2UpOwogCQl9CiAKIAkJZWNobyAkdGhpcy0+c2hvd19lcnJvcigkaGVhZGluZywgJG1lc3NhZ2UsICdlcnJvcl80MDQnLCA0MDQpOwpAQCAtMTM3LDE2ICsxNDUsMjQgQEAKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gc2hvd19lcnJvcigkaGVhZGluZywgJG1lc3NhZ2UsICR0ZW1wbGF0ZSA9ICdlcnJvcl9nZW5lcmFsJywgJHN0YXR1c19jb2RlID0gNTAwKQogCXsKLQkJc2V0X3N0YXR1c19oZWFkZXIoJHN0YXR1c19jb2RlKTsKLQotCQkkbWVzc2FnZSA9ICc8cD4nLmltcGxvZGUoJzwvcD48cD4nLCBpc19hcnJheSgkbWVzc2FnZSkgPyAkbWVzc2FnZSA6IGFycmF5KCRtZXNzYWdlKSkuJzwvcD4nOworCQlpZiAoaXNfY2xpKCkpCisJCXsKKwkJCSRtZXNzYWdlID0gIlx0Ii4oaXNfYXJyYXkoJG1lc3NhZ2UpID8gaW1wbG9kZSgiXG5cdCIsICRtZXNzYWdlKSA6ICRtZXNzYWdlKTsKKwkJCSR0ZW1wbGF0ZSA9ICdjbGknLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRlbXBsYXRlOworCQl9CisJCWVsc2UKKwkJeworCQkJc2V0X3N0YXR1c19oZWFkZXIoJHN0YXR1c19jb2RlKTsKKwkJCSRtZXNzYWdlID0gJzxwPicuKGlzX2FycmF5KCRtZXNzYWdlKSA/IGltcGxvZGUoJzwvcD48cD4nLCAkbWVzc2FnZSkgOiAkbWVzc2FnZSkuJzwvcD4nOworCQkJJHRlbXBsYXRlID0gJ2h0bWwnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRlbXBsYXRlOworCQl9CiAKIAkJaWYgKG9iX2dldF9sZXZlbCgpID4gJHRoaXMtPm9iX2xldmVsICsgMSkKIAkJewogCQkJb2JfZW5kX2ZsdXNoKCk7CiAJCX0KIAkJb2Jfc3RhcnQoKTsKLQkJaW5jbHVkZShWSUVXUEFUSC4nZXJyb3JzLycuJHRlbXBsYXRlLicucGhwJyk7CisJCWluY2x1ZGUoVklFV1BBVEguJ2Vycm9ycycuRElSRUNUT1JZX1NFUEFSQVRPUi4kdGVtcGxhdGUuJy5waHAnKTsKIAkJJGJ1ZmZlciA9IG9iX2dldF9jb250ZW50cygpOwogCQlvYl9lbmRfY2xlYW4oKTsKIAkJcmV0dXJuICRidWZmZXI7CkBAIC0xNjYsMTMgKzE4MiwyMiBAQAogCXB1YmxpYyBmdW5jdGlvbiBzaG93X3BocF9lcnJvcigkc2V2ZXJpdHksICRtZXNzYWdlLCAkZmlsZXBhdGgsICRsaW5lKQogCXsKIAkJJHNldmVyaXR5ID0gaXNzZXQoJHRoaXMtPmxldmVsc1skc2V2ZXJpdHldKSA/ICR0aGlzLT5sZXZlbHNbJHNldmVyaXR5XSA6ICRzZXZlcml0eTsKLQkJJGZpbGVwYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkZmlsZXBhdGgpOwogCi0JCS8vIEZvciBzYWZldHkgcmVhc29ucyB3ZSBkbyBub3Qgc2hvdyB0aGUgZnVsbCBmaWxlIHBhdGgKLQkJaWYgKEZBTFNFICE9PSBzdHJwb3MoJGZpbGVwYXRoLCAnLycpKQorCQkvLyBGb3Igc2FmZXR5IHJlYXNvbnMgd2UgZG9uJ3Qgc2hvdyB0aGUgZnVsbCBmaWxlIHBhdGggaW4gbm9uLUNMSSByZXF1ZXN0cworCQlpZiAoICEgaXNfY2xpKCkpCiAJCXsKLQkJCSR4ID0gZXhwbG9kZSgnLycsICRmaWxlcGF0aCk7Ci0JCQkkZmlsZXBhdGggPSAkeFtjb3VudCgkeCktMl0uJy8nLmVuZCgkeCk7CisJCQkkZmlsZXBhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRmaWxlcGF0aCk7CisJCQlpZiAoRkFMU0UgIT09IHN0cnBvcygkZmlsZXBhdGgsICcvJykpCisJCQl7CisJCQkJJHggPSBleHBsb2RlKCcvJywgJGZpbGVwYXRoKTsKKwkJCQkkZmlsZXBhdGggPSAkeFtjb3VudCgkeCktMl0uJy8nLmVuZCgkeCk7CisJCQl9CisKKwkJCSR0ZW1wbGF0ZSA9ICdodG1sJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidlcnJvcl9waHAnOworCQl9CisJCWVsc2UKKwkJeworCQkJJHRlbXBsYXRlID0gJ2NsaScuRElSRUNUT1JZX1NFUEFSQVRPUi4nZXJyb3JfcGhwJzsKIAkJfQogCiAJCWlmIChvYl9nZXRfbGV2ZWwoKSA+ICR0aGlzLT5vYl9sZXZlbCArIDEpCkBAIC0xODAsNyArMjA1LDcgQEAKIAkJCW9iX2VuZF9mbHVzaCgpOwogCQl9CiAJCW9iX3N0YXJ0KCk7Ci0JCWluY2x1ZGUoVklFV1BBVEguJ2Vycm9ycy9lcnJvcl9waHAucGhwJyk7CisJCWluY2x1ZGUoVklFV1BBVEguJ2Vycm9ycycuRElSRUNUT1JZX1NFUEFSQVRPUi4kdGVtcGxhdGUuJy5waHAnKTsKIAkJJGJ1ZmZlciA9IG9iX2dldF9jb250ZW50cygpOwogCQlvYl9lbmRfY2xlYW4oKTsKIAkJZWNobyAkYnVmZmVyOwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvSG9va3MucGhwIGIvc3lzdGVtL2NvcmUvSG9va3MucGhwCmluZGV4IGIzYjExMTkuLjliY2MyM2EgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9jb3JlL0hvb2tzLnBocAorKysgYi9zeXN0ZW0vY29yZS9Ib29rcy5waHAKQEAgLTU0LDYgKzU0LDEzIEBACiAJcHVibGljICRob29rcyA9CWFycmF5KCk7CiAKIAkvKioKKwkgKiBBcnJheSB3aXRoIGNsYXNzIG9iamVjdHMgdG8gdXNlIGhvb2tzIG1ldGhvZHMKKwkgKgorCSAqIEB2YXIgYXJyYXkKKwkgKi8KKwlwcm90ZWN0ZWQgJF9vYmplY3RzID0gYXJyYXkoKTsKKworCS8qKgogCSAqIEluIHByb2dyZXNzIGZsYWcKIAkgKgogCSAqIERldGVybWluZXMgd2hldGhlciBob29rIGlzIGluIHByb2dyZXNzLCB1c2VkIHRvIHByZXZlbnQgaW5maW50ZSBsb29wcwpAQCAtMTg0LDcgKzE5MSw3IEBACiAJCSRmdW5jdGlvbgk9IGVtcHR5KCRkYXRhWydmdW5jdGlvbiddKSA/IEZBTFNFIDogJGRhdGFbJ2Z1bmN0aW9uJ107CiAJCSRwYXJhbXMJCT0gaXNzZXQoJGRhdGFbJ3BhcmFtcyddKSA/ICRkYXRhWydwYXJhbXMnXSA6ICcnOwogCi0JCWlmICgkY2xhc3MgPT09IEZBTFNFICYmICRmdW5jdGlvbiA9PT0gRkFMU0UpCisJCWlmIChlbXB0eSgkZnVuY3Rpb24pKQogCQl7CiAJCQlyZXR1cm4gRkFMU0U7CiAJCX0KQEAgLTE5NSwxOSArMjAyLDM5IEBACiAJCS8vIENhbGwgdGhlIHJlcXVlc3RlZCBjbGFzcyBhbmQvb3IgZnVuY3Rpb24KIAkJaWYgKCRjbGFzcyAhPT0gRkFMU0UpCiAJCXsKLQkJCWlmICggISBjbGFzc19leGlzdHMoJGNsYXNzLCBGQUxTRSkpCisJCQkvLyBUaGUgb2JqZWN0IGlzIHN0b3JlZD8KKwkJCWlmIChpc3NldCgkdGhpcy0+X29iamVjdHNbJGNsYXNzXSkpCiAJCQl7Ci0JCQkJcmVxdWlyZSgkZmlsZXBhdGgpOworCQkJCWlmIChtZXRob2RfZXhpc3RzKCR0aGlzLT5fb2JqZWN0c1skY2xhc3NdLCAkZnVuY3Rpb24pKQorCQkJCXsKKwkJCQkJJHRoaXMtPl9vYmplY3RzWyRjbGFzc10tPiRmdW5jdGlvbigkcGFyYW1zKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcmV0dXJuICR0aGlzLT5faW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwkJCQl9CiAJCQl9CisJCQllbHNlCisJCQl7CisJCQkJY2xhc3NfZXhpc3RzKCRjbGFzcywgRkFMU0UpIE9SIHJlcXVpcmVfb25jZSgkZmlsZXBhdGgpOwogCi0JCQkkSE9PSyA9IG5ldyAkY2xhc3MoKTsKLQkJCSRIT09LLT4kZnVuY3Rpb24oJHBhcmFtcyk7CisJCQkJaWYgKCAhIGNsYXNzX2V4aXN0cygkY2xhc3MsIEZBTFNFKSBPUiAhIG1ldGhvZF9leGlzdHMoJGNsYXNzLCAkZnVuY3Rpb24pKQorCQkJCXsKKwkJCQkJcmV0dXJuICR0aGlzLT5faW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwkJCQl9CisKKwkJCQkvLyBTdG9yZSB0aGUgb2JqZWN0IGFuZCBleGVjdXRlIHRoZSBtZXRob2QKKwkJCQkkdGhpcy0+X29iamVjdHNbJGNsYXNzXSA9IG5ldyAkY2xhc3MoKTsKKwkJCQkkdGhpcy0+X29iamVjdHNbJGNsYXNzXS0+JGZ1bmN0aW9uKCRwYXJhbXMpOworCQkJfQogCQl9CiAJCWVsc2UKIAkJeworCQkJZnVuY3Rpb25fZXhpc3RzKCRmdW5jdGlvbikgT1IgcmVxdWlyZV9vbmNlKCRmaWxlcGF0aCk7CisKIAkJCWlmICggISBmdW5jdGlvbl9leGlzdHMoJGZ1bmN0aW9uKSkKIAkJCXsKLQkJCQlyZXF1aXJlKCRmaWxlcGF0aCk7CisJCQkJcmV0dXJuICR0aGlzLT5faW5fcHJvZ3Jlc3MgPSBGQUxTRTsKIAkJCX0KIAogCQkJJGZ1bmN0aW9uKCRwYXJhbXMpOwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvSW5wdXQucGhwIGIvc3lzdGVtL2NvcmUvSW5wdXQucGhwCmluZGV4IDBlZjgxMTIuLmNjYjcwZGEgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9jb3JlL0lucHV0LnBocAorKysgYi9zeXN0ZW0vY29yZS9JbnB1dC5waHAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlwdWJsaWMgJGlwX2FkZHJlc3MgPSBGQUxTRTsKIAogCS8qKgotCSAqIFVzZXIgYWdlbnQgc3RyaW4KKwkgKiBVc2VyIGFnZW50IHN0cmluZwogCSAqCiAJICogQHZhcglzdHJpbmcKIAkgKi8KQEAgLTYzLDcgKzYzLDcgQEAKIAlwcm90ZWN0ZWQgJF9hbGxvd19nZXRfYXJyYXkgPSBUUlVFOwogCiAJLyoqCi0JICogU3RhbmRhcnRpemUgbmV3IGxpbmVzIGZsYWcKKwkgKiBTdGFuZGFyZGl6ZSBuZXcgbGluZXMgZmxhZwogCSAqCiAJICogSWYgc2V0IHRvIFRSVUUsIHRoZW4gbmV3bGluZXMgYXJlIHN0YW5kYXJkaXplZC4KIAkgKgpAQCAtMTIxLDkgKzEyMSwxMCBAQAogCXsKIAkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ0lucHV0IENsYXNzIEluaXRpYWxpemVkJyk7CiAKLQkJJHRoaXMtPl9hbGxvd19nZXRfYXJyYXkJPSAoY29uZmlnX2l0ZW0oJ2FsbG93X2dldF9hcnJheScpID09PSBUUlVFKTsKLQkJJHRoaXMtPl9lbmFibGVfeHNzCT0gKGNvbmZpZ19pdGVtKCdnbG9iYWxfeHNzX2ZpbHRlcmluZycpID09PSBUUlVFKTsKLQkJJHRoaXMtPl9lbmFibGVfY3NyZgk9IChjb25maWdfaXRlbSgnY3NyZl9wcm90ZWN0aW9uJykgPT09IFRSVUUpOworCQkkdGhpcy0+X2FsbG93X2dldF9hcnJheQkJPSAoY29uZmlnX2l0ZW0oJ2FsbG93X2dldF9hcnJheScpID09PSBUUlVFKTsKKwkJJHRoaXMtPl9lbmFibGVfeHNzCQk9IChjb25maWdfaXRlbSgnZ2xvYmFsX3hzc19maWx0ZXJpbmcnKSA9PT0gVFJVRSk7CisJCSR0aGlzLT5fZW5hYmxlX2NzcmYJCT0gKGNvbmZpZ19pdGVtKCdjc3JmX3Byb3RlY3Rpb24nKSA9PT0gVFJVRSk7CisJCSR0aGlzLT5fc2FuZGFyZGl6ZV9uZXdsaW5lcwk9IChib29sKSBjb25maWdfaXRlbSgnc3RhbmRhcmRpemVfbmV3bGluZXMnKTsKIAogCQlnbG9iYWwgJFNFQzsKIAkJJHRoaXMtPnNlY3VyaXR5ID0mICRTRUM7CkBAIC0xNTEsOCArMTUyLDEwIEBACiAJICogQHBhcmFtCWJvb2wJJHhzc19jbGVhbglXaGV0aGVyIHRvIGFwcGx5IFhTUyBmaWx0ZXJpbmcKIAkgKiBAcmV0dXJuCW1peGVkCiAJICovCi0JcHJvdGVjdGVkIGZ1bmN0aW9uIF9mZXRjaF9mcm9tX2FycmF5KCYkYXJyYXksICRpbmRleCA9ICcnLCAkeHNzX2NsZWFuID0gRkFMU0UpCisJcHJvdGVjdGVkIGZ1bmN0aW9uIF9mZXRjaF9mcm9tX2FycmF5KCYkYXJyYXksICRpbmRleCA9ICcnLCAkeHNzX2NsZWFuID0gTlVMTCkKIAl7CisJCWlzX2Jvb2woJHhzc19jbGVhbikgT1IgJHhzc19jbGVhbiA9ICR0aGlzLT5fZW5hYmxlX3hzczsKKwogCQlpZiAoaXNzZXQoJGFycmF5WyRpbmRleF0pKQogCQl7CiAJCQkkdmFsdWUgPSAkYXJyYXlbJGluZGV4XTsKQEAgLTE5Nyw4ICsyMDAsMTAgQEAKIAkgKiBAcGFyYW0JYm9vbAkkeHNzX2NsZWFuCVdoZXRoZXIgdG8gYXBwbHkgWFNTIGZpbHRlcmluZwogCSAqIEByZXR1cm4JbWl4ZWQKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gZ2V0KCRpbmRleCA9IE5VTEwsICR4c3NfY2xlYW4gPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gZ2V0KCRpbmRleCA9IE5VTEwsICR4c3NfY2xlYW4gPSBOVUxMKQogCXsKKwkJaXNfYm9vbCgkeHNzX2NsZWFuKSBPUiAkeHNzX2NsZWFuID0gJHRoaXMtPl9lbmFibGVfeHNzOworCiAJCS8vIENoZWNrIGlmIGEgZmllbGQgaGFzIGJlZW4gcHJvdmlkZWQKIAkJaWYgKCRpbmRleCA9PT0gTlVMTCkKIAkJewpAQCAtMjI5LDggKzIzNCwxMCBAQAogCSAqIEBwYXJhbQlib29sCSR4c3NfY2xlYW4JV2hldGhlciB0byBhcHBseSBYU1MgZmlsdGVyaW5nCiAJICogQHJldHVybgltaXhlZAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBwb3N0KCRpbmRleCA9IE5VTEwsICR4c3NfY2xlYW4gPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gcG9zdCgkaW5kZXggPSBOVUxMLCAkeHNzX2NsZWFuID0gTlVMTCkKIAl7CisJCWlzX2Jvb2woJHhzc19jbGVhbikgT1IgJHhzc19jbGVhbiA9ICR0aGlzLT5fZW5hYmxlX3hzczsKKwogCQkvLyBDaGVjayBpZiBhIGZpZWxkIGhhcyBiZWVuIHByb3ZpZGVkCiAJCWlmICgkaW5kZXggPT09IE5VTEwpCiAJCXsKQEAgLTI2MSw4ICsyNjgsMTAgQEAKIAkgKiBAcGFyYW0JYm9vbAkkeHNzX2NsZWFuCVdoZXRoZXIgdG8gYXBwbHkgWFNTIGZpbHRlcmluZwogCSAqIEByZXR1cm4JbWl4ZWQKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gZ2V0X3Bvc3QoJGluZGV4ID0gJycsICR4c3NfY2xlYW4gPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gcG9zdF9nZXQoJGluZGV4ID0gJycsICR4c3NfY2xlYW4gPSBOVUxMKQogCXsKKwkJaXNfYm9vbCgkeHNzX2NsZWFuKSBPUiAkeHNzX2NsZWFuID0gJHRoaXMtPl9lbmFibGVfeHNzOworCiAJCXJldHVybiBpc3NldCgkX1BPU1RbJGluZGV4XSkKIAkJCT8gJHRoaXMtPnBvc3QoJGluZGV4LCAkeHNzX2NsZWFuKQogCQkJOiAkdGhpcy0+Z2V0KCRpbmRleCwgJHhzc19jbGVhbik7CkBAIC0yNzEsMTQgKzI4MCwzNCBAQAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkvKioKKwkgKiBGZXRjaCBhbiBpdGVtIGZyb20gR0VUIGRhdGEgd2l0aCBmYWxsYmFjayB0byBQT1NUCisJICoKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpbmRleAkJSW5kZXggZm9yIGl0ZW0gdG8gYmUgZmV0Y2hlZCBmcm9tICRfR0VUIG9yICRfUE9TVAorCSAqIEBwYXJhbQlib29sCSR4c3NfY2xlYW4JV2hldGhlciB0byBhcHBseSBYU1MgZmlsdGVyaW5nCisJICogQHJldHVybgltaXhlZAorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBnZXRfcG9zdCgkaW5kZXggPSAnJywgJHhzc19jbGVhbiA9IE5VTEwpCisJeworCQlpc19ib29sKCR4c3NfY2xlYW4pIE9SICR4c3NfY2xlYW4gPSAkdGhpcy0+X2VuYWJsZV94c3M7CisKKwkJcmV0dXJuIGlzc2V0KCRfR0VUWyRpbmRleF0pCisJCQk/ICR0aGlzLT5nZXQoJGluZGV4LCAkeHNzX2NsZWFuKQorCQkJOiAkdGhpcy0+cG9zdCgkaW5kZXgsICR4c3NfY2xlYW4pOworCX0KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKIAkgKiBGZXRjaCBhbiBpdGVtIGZyb20gdGhlIENPT0tJRSBhcnJheQogCSAqCiAJICogQHBhcmFtCXN0cmluZwkkaW5kZXgJCUluZGV4IGZvciBpdGVtIHRvIGJlIGZldGNoZWQgZnJvbSAkX0NPT0tJRQogCSAqIEBwYXJhbQlib29sCSR4c3NfY2xlYW4JV2hldGhlciB0byBhcHBseSBYU1MgZmlsdGVyaW5nCiAJICogQHJldHVybgltaXhlZAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBjb29raWUoJGluZGV4ID0gJycsICR4c3NfY2xlYW4gPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gY29va2llKCRpbmRleCA9ICcnLCAkeHNzX2NsZWFuID0gTlVMTCkKIAl7CisJCWlzX2Jvb2woJHhzc19jbGVhbikgT1IgJHhzc19jbGVhbiA9ICR0aGlzLT5fZW5hYmxlX3hzczsKKwogCQlyZXR1cm4gJHRoaXMtPl9mZXRjaF9mcm9tX2FycmF5KCRfQ09PS0lFLCAkaW5kZXgsICR4c3NfY2xlYW4pOwogCX0KIApAQCAtMjkxLDggKzMyMCwxMCBAQAogCSAqIEBwYXJhbQlib29sCSR4c3NfY2xlYW4JV2hldGhlciB0byBhcHBseSBYU1MgZmlsdGVyaW5nCiAJICogQHJldHVybgltaXhlZAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBzZXJ2ZXIoJGluZGV4ID0gJycsICR4c3NfY2xlYW4gPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gc2VydmVyKCRpbmRleCA9ICcnLCAkeHNzX2NsZWFuID0gTlVMTCkKIAl7CisJCWlzX2Jvb2woJHhzc19jbGVhbikgT1IgJHhzc19jbGVhbiA9ICR0aGlzLT5fZW5hYmxlX3hzczsKKwogCQlyZXR1cm4gJHRoaXMtPl9mZXRjaF9mcm9tX2FycmF5KCRfU0VSVkVSLCAkaW5kZXgsICR4c3NfY2xlYW4pOwogCX0KIApAQCAtMzA3LDggKzMzOCwxMCBAQAogCSAqIEBwYXJhbQlib29sCSR4c3NfY2xlYW4JV2hldGhlciB0byBhcHBseSBYU1MgZmlsdGVyaW5nCiAJICogQHJldHVybgltaXhlZAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBpbnB1dF9zdHJlYW0oJGluZGV4ID0gJycsICR4c3NfY2xlYW4gPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gaW5wdXRfc3RyZWFtKCRpbmRleCA9ICcnLCAkeHNzX2NsZWFuID0gTlVMTCkKIAl7CisJCWlzX2Jvb2woJHhzc19jbGVhbikgT1IgJHhzc19jbGVhbiA9ICR0aGlzLT5fZW5hYmxlX3hzczsKKwogCQkvLyBUaGUgaW5wdXQgc3RyZWFtIGNhbiBvbmx5IGJlIHJlYWQgb25jZSwgc28gd2UnbGwgbmVlZCB0byBjaGVjawogCQkvLyBpZiB3ZSBoYXZlIGFscmVhZHkgZG9uZSB0aGF0IGZpcnN0LgogCQlpZiAoaXNfYXJyYXkoJHRoaXMtPl9pbnB1dF9zdHJlYW0pKQpAQCAtMzQ1LDcgKzM3OCw3IEBACiAJICogQHBhcmFtCWJvb2wJCSRodHRwb25seQlXaGV0aGVyIHRvIG9ubHkgbWFrZXMgdGhlIGNvb2tpZSBhY2Nlc3NpYmxlIHZpYSBIVFRQIChubyBqYXZhc2NyaXB0KQogCSAqIEByZXR1cm4Jdm9pZAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBzZXRfY29va2llKCRuYW1lID0gJycsICR2YWx1ZSA9ICcnLCAkZXhwaXJlID0gJycsICRkb21haW4gPSAnJywgJHBhdGggPSAnLycsICRwcmVmaXggPSAnJywgJHNlY3VyZSA9IEZBTFNFLCAkaHR0cG9ubHkgPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gc2V0X2Nvb2tpZSgkbmFtZSwgJHZhbHVlID0gJycsICRleHBpcmUgPSAnJywgJGRvbWFpbiA9ICcnLCAkcGF0aCA9ICcvJywgJHByZWZpeCA9ICcnLCAkc2VjdXJlID0gRkFMU0UsICRodHRwb25seSA9IEZBTFNFKQogCXsKIAkJaWYgKGlzX2FycmF5KCRuYW1lKSkKIAkJewpAQCAtNjcxLDEzICs3MDQsMjIgQEAKIAkJCS8vIGJ1dCB0aGF0IHdoZW4gcHJlc2VudCB3aWxsIHRyaXAgb3VyICdEaXNhbGxvd2VkIEtleSBDaGFyYWN0ZXJzJyBhbGFybQogCQkJLy8gaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjEwOS50eHQKIAkJCS8vIG5vdGUgdGhhdCB0aGUga2V5IG5hbWVzIGJlbG93IGFyZSBzaW5nbGUgcXVvdGVkIHN0cmluZ3MsIGFuZCBhcmUgbm90IFBIUCB2YXJpYWJsZXMKLQkJCXVuc2V0KCRfQ09PS0lFWyckVmVyc2lvbiddKTsKLQkJCXVuc2V0KCRfQ09PS0lFWyckUGF0aCddKTsKLQkJCXVuc2V0KCRfQ09PS0lFWyckRG9tYWluJ10pOworCQkJdW5zZXQoCisJCQkJJF9DT09LSUVbJyRWZXJzaW9uJ10sCisJCQkJJF9DT09LSUVbJyRQYXRoJ10sCisJCQkJJF9DT09LSUVbJyREb21haW4nXQorCQkJKTsKIAogCQkJZm9yZWFjaCAoJF9DT09LSUUgYXMgJGtleSA9PiAkdmFsKQogCQkJewotCQkJCSRfQ09PS0lFWyR0aGlzLT5fY2xlYW5faW5wdXRfa2V5cygka2V5KV0gPSAkdGhpcy0+X2NsZWFuX2lucHV0X2RhdGEoJHZhbCk7CisJCQkJaWYgKCgkY29va2llX2tleSA9ICR0aGlzLT5fY2xlYW5faW5wdXRfa2V5cygka2V5KSkgIT09IEZBTFNFKQorCQkJCXsKKwkJCQkJJF9DT09LSUVbJGNvb2tpZV9rZXldID0gJHRoaXMtPl9jbGVhbl9pbnB1dF9kYXRhKCR2YWwpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQl1bnNldCgkX0NPT0tJRVska2V5XSk7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTY4NSwxMiArNzI3LDEyIEBACiAJCSRfU0VSVkVSWydQSFBfU0VMRiddID0gc3RyaXBfdGFncygkX1NFUlZFUlsnUEhQX1NFTEYnXSk7CiAKIAkJLy8gQ1NSRiBQcm90ZWN0aW9uIGNoZWNrCi0JCWlmICgkdGhpcy0+X2VuYWJsZV9jc3JmID09PSBUUlVFICYmICEgJHRoaXMtPmlzX2NsaV9yZXF1ZXN0KCkpCisJCWlmICgkdGhpcy0+X2VuYWJsZV9jc3JmID09PSBUUlVFICYmICEgaXNfY2xpKCkpCiAJCXsKIAkJCSR0aGlzLT5zZWN1cml0eS0+Y3NyZl92ZXJpZnkoKTsKIAkJfQogCi0JCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICdHbG9iYWwgUE9TVCBhbmQgQ09PS0lFIGRhdGEgc2FuaXRpemVkJyk7CisJCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICdHbG9iYWwgUE9TVCwgR0VUIGFuZCBDT09LSUUgZGF0YSBzYW5pdGl6ZWQnKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzMzLDEzICs3NzUsNyBAQAogCQl9CiAKIAkJLy8gUmVtb3ZlIGNvbnRyb2wgY2hhcmFjdGVycwotCQkkc3RyID0gcmVtb3ZlX2ludmlzaWJsZV9jaGFyYWN0ZXJzKCRzdHIpOwotCi0JCS8vIFNob3VsZCB3ZSBmaWx0ZXIgdGhlIGlucHV0IGRhdGE/Ci0JCWlmICgkdGhpcy0+X2VuYWJsZV94c3MgPT09IFRSVUUpCi0JCXsKLQkJCSRzdHIgPSAkdGhpcy0+c2VjdXJpdHktPnhzc19jbGVhbigkc3RyKTsKLQkJfQorCQkkc3RyID0gcmVtb3ZlX2ludmlzaWJsZV9jaGFyYWN0ZXJzKCRzdHIsIEZBTFNFKTsKIAogCQkvLyBTdGFuZGFyZGl6ZSBuZXdsaW5lcyBpZiBuZWVkZWQKIAkJaWYgKCR0aGlzLT5fc3RhbmRhcmRpemVfbmV3bGluZXMgPT09IFRSVUUpCkBAIC03NjAsMTUgKzc5NiwyNSBAQAogCSAqIG9ubHkgbmFtZWQgd2l0aCBhbHBoYS1udW1lcmljIHRleHQgYW5kIGEgZmV3IG90aGVyIGl0ZW1zLgogCSAqCiAJICogQHBhcmFtCXN0cmluZwkkc3RyCUlucHV0IHN0cmluZwotCSAqIEByZXR1cm4Jc3RyaW5nCisJICogQHBhcmFtCXN0cmluZwkkZmF0YWwJV2hldGhlciB0byB0ZXJtaW5hdGUgc2NyaXB0IGV4ZWN0aW9uCisJICoJCQkJb3IgdG8gcmV0dXJuIEZBTFNFIGlmIGFuIGludmFsaWQKKwkgKgkJCQlrZXkgaXMgZW5jb3VudGVyZWQKKwkgKiBAcmV0dXJuCXN0cmluZ3xib29sCiAJICovCi0JcHJvdGVjdGVkIGZ1bmN0aW9uIF9jbGVhbl9pbnB1dF9rZXlzKCRzdHIpCisJcHJvdGVjdGVkIGZ1bmN0aW9uIF9jbGVhbl9pbnB1dF9rZXlzKCRzdHIsICRmYXRhbCA9IFRSVUUpCiAJewogCQlpZiAoICEgcHJlZ19tYXRjaCgnL15bYS16MC05Ol9cL3wtXSskL2knLCAkc3RyKSkKIAkJewotCQkJc2V0X3N0YXR1c19oZWFkZXIoNTAzKTsKLQkJCWVjaG8gJ0Rpc2FsbG93ZWQgS2V5IENoYXJhY3RlcnMuJzsKLQkJCWV4aXQoRVhJVF9VU0VSX0lOUFVUKTsKKwkJCWlmICgkZmF0YWwgPT09IFRSVUUpCisJCQl7CisJCQkJcmV0dXJuIEZBTFNFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXNldF9zdGF0dXNfaGVhZGVyKDUwMyk7CisJCQkJZWNobyAnRGlzYWxsb3dlZCBLZXkgQ2hhcmFjdGVycy4nOworCQkJCWV4aXQoRVhJVF9VU0VSX0lOUFVUKTsKKwkJCX0KIAkJfQogCiAJCS8vIENsZWFuIFVURi04IGlmIHN1cHBvcnRlZApAQCAtODY4LDExICs5MTQsMTIgQEAKIAkgKgogCSAqIFRlc3QgdG8gc2VlIGlmIGEgcmVxdWVzdCB3YXMgbWFkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiAJICoKLQkgKiBAcmV0dXJuIAlib29sCisJICogQGRlcHJlY2F0ZWQJMy4wLjAJVXNlIGlzX2NsaSgpIGluc3RlYWQKKwkgKiBAcmV0dXJuICAgICAgYm9vbAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBpc19jbGlfcmVxdWVzdCgpCiAJewotCQlyZXR1cm4gKHBocF9zYXBpX25hbWUoKSA9PT0gJ2NsaScgT1IgZGVmaW5lZCgnU1RESU4nKSk7CisJCXJldHVybiBpc19jbGkoKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvTGFuZy5waHAgYi9zeXN0ZW0vY29yZS9MYW5nLnBocAppbmRleCAzMjM2NzA5Li4yOTBiMzhiIDEwMDY0NAotLS0gYS9zeXN0ZW0vY29yZS9MYW5nLnBocAorKysgYi9zeXN0ZW0vY29yZS9MYW5nLnBocApAQCAtMTY2LDcgKzE2Niw3IEBACiAJICogQHBhcmFtCWJvb2wJJGxvZ19lcnJvcnMJV2hldGhlciB0byBsb2cgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgbGluZSBpcyBub3QgZm91bmQKIAkgKiBAcmV0dXJuCXN0cmluZwlUcmFuc2xhdGlvbgogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBsaW5lKCRsaW5lID0gJycsICRsb2dfZXJyb3JzID0gVFJVRSkKKwlwdWJsaWMgZnVuY3Rpb24gbGluZSgkbGluZSwgJGxvZ19lcnJvcnMgPSBUUlVFKQogCXsKIAkJJHZhbHVlID0gKCRsaW5lID09PSAnJyBPUiAhIGlzc2V0KCR0aGlzLT5sYW5ndWFnZVskbGluZV0pKSA/IEZBTFNFIDogJHRoaXMtPmxhbmd1YWdlWyRsaW5lXTsKIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvTG9hZGVyLnBocCBiL3N5c3RlbS9jb3JlL0xvYWRlci5waHAKaW5kZXggNzBhNmI2Zi4uOGM4ZDVhMyAxMDA2NDQKLS0tIGEvc3lzdGVtL2NvcmUvTG9hZGVyLnBocAorKysgYi9zeXN0ZW0vY29yZS9Mb2FkZXIucGhwCkBAIC03NiwxMyArNzYsNiBAQAogCXByb3RlY3RlZCAkX2NpX2hlbHBlcl9wYXRocyA9CWFycmF5KEFQUFBBVEgsIEJBU0VQQVRIKTsKIAogCS8qKgotCSAqIExpc3Qgb2YgbG9hZGVkIGJhc2UgY2xhc3NlcwotCSAqCi0JICogQHZhcglhcnJheQotCSAqLwotCXByb3RlY3RlZCAkX2Jhc2VfY2xhc3NlcyA9CWFycmF5KCk7IC8vIFNldCBieSB0aGUgY29udHJvbGxlciBjbGFzcwotCi0JLyoqCiAJICogTGlzdCBvZiBjYWNoZWQgdmFyaWFibGVzCiAJICoKIAkgKiBAdmFyCWFycmF5CkBAIC0xMjAsNiArMTEzLDggQEAKIAkJJ3VzZXJfYWdlbnQnID0+ICdhZ2VudCcKIAkpOwogCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogCS8qKgogCSAqIENsYXNzIGNvbnN0cnVjdG9yCiAJICoKQEAgLTEyOSw3ICsxMjQsOCBAQAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAJewotCQkkdGhpcy0+X2NpX29iX2xldmVsICA9IG9iX2dldF9sZXZlbCgpOworCQkkdGhpcy0+X2NpX29iX2xldmVsID0gb2JfZ2V0X2xldmVsKCk7CisJCSR0aGlzLT5fY2lfY2xhc3NlcyA9JiBpc19sb2FkZWQoKTsKIAogCQlsb2dfbWVzc2FnZSgnZGVidWcnLCAnTG9hZGVyIENsYXNzIEluaXRpYWxpemVkJyk7CiAJfQpAQCAtMTQ3LDcgKzE0Myw2IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGluaXRpYWxpemUoKQogCXsKLQkJJHRoaXMtPl9iYXNlX2NsYXNzZXMgPSYgaXNfbG9hZGVkKCk7CiAJCSR0aGlzLT5fY2lfYXV0b2xvYWRlcigpOwogCX0KIApAQCAtMTY1LDcgKzE2MCw3IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGlzX2xvYWRlZCgkY2xhc3MpCiAJewotCQlyZXR1cm4gaXNzZXQoJHRoaXMtPl9jaV9jbGFzc2VzWyRjbGFzc10pID8gJHRoaXMtPl9jaV9jbGFzc2VzWyRjbGFzc10gOiBGQUxTRTsKKwkJcmV0dXJuIGFycmF5X3NlYXJjaCh1Y2ZpcnN0KCRjbGFzcyksICR0aGlzLT5fY2lfY2xhc3NlcywgVFJVRSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE3OSwyMyArMTc0LDI5IEBACiAJICogQHBhcmFtCXN0cmluZwkkbGlicmFyeQlMaWJyYXJ5IG5hbWUKIAkgKiBAcGFyYW0JYXJyYXkJJHBhcmFtcwkJT3B0aW9uYWwgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBsaWJyYXJ5IGNsYXNzIGNvbnN0cnVjdG9yCiAJICogQHBhcmFtCXN0cmluZwkkb2JqZWN0X25hbWUJQW4gb3B0aW9uYWwgb2JqZWN0IG5hbWUgdG8gYXNzaWduIHRvCi0JICogQHJldHVybgl2b2lkCisJICogQHJldHVybglvYmplY3QKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gbGlicmFyeSgkbGlicmFyeSA9ICcnLCAkcGFyYW1zID0gTlVMTCwgJG9iamVjdF9uYW1lID0gTlVMTCkKKwlwdWJsaWMgZnVuY3Rpb24gbGlicmFyeSgkbGlicmFyeSwgJHBhcmFtcyA9IE5VTEwsICRvYmplY3RfbmFtZSA9IE5VTEwpCiAJewotCQlpZiAoaXNfYXJyYXkoJGxpYnJhcnkpKQorCQlpZiAoZW1wdHkoJGxpYnJhcnkpKQogCQl7Ci0JCQlmb3JlYWNoICgkbGlicmFyeSBhcyAkY2xhc3MpCisJCQlyZXR1cm4gJHRoaXM7CisJCX0KKwkJZWxzZWlmIChpc19hcnJheSgkbGlicmFyeSkpCisJCXsKKwkJCWZvcmVhY2ggKCRsaWJyYXJ5IGFzICRrZXkgPT4gJHZhbHVlKQogCQkJewotCQkJCSR0aGlzLT5saWJyYXJ5KCRjbGFzcywgJHBhcmFtcyk7CisJCQkJaWYgKGlzX2ludCgka2V5KSkKKwkJCQl7CisJCQkJCSR0aGlzLT5saWJyYXJ5KCR2YWx1ZSwgJHBhcmFtcyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCSR0aGlzLT5saWJyYXJ5KCRrZXksICRwYXJhbXMsICR2YWx1ZSk7CisJCQkJfQogCQkJfQogCi0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoJGxpYnJhcnkgPT09ICcnIE9SIGlzc2V0KCR0aGlzLT5fYmFzZV9jbGFzc2VzWyRsaWJyYXJ5XSkpCi0JCXsKLQkJCXJldHVybjsKKwkJCXJldHVybiAkdGhpczsKIAkJfQogCiAJCWlmICgkcGFyYW1zICE9PSBOVUxMICYmICEgaXNfYXJyYXkoJHBhcmFtcykpCkBAIC0yMDQsNiArMjA1LDcgQEAKIAkJfQogCiAJCSR0aGlzLT5fY2lfbG9hZF9jbGFzcygkbGlicmFyeSwgJHBhcmFtcywgJG9iamVjdF9uYW1lKTsKKwkJcmV0dXJuICR0aGlzOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTYsMjEgKzIxOCwyMiBAQAogCSAqIEBwYXJhbQlzdHJpbmcJJG1vZGVsCQlNb2RlbCBuYW1lCiAJICogQHBhcmFtCXN0cmluZwkkbmFtZQkJQW4gb3B0aW9uYWwgb2JqZWN0IG5hbWUgdG8gYXNzaWduIHRvCiAJICogQHBhcmFtCWJvb2wJJGRiX2Nvbm4JQW4gb3B0aW9uYWwgZGF0YWJhc2UgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHRvIGluaXRpYWxpemUKLQkgKiBAcmV0dXJuCXZvaWQKKwkgKiBAcmV0dXJuCW9iamVjdAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBtb2RlbCgkbW9kZWwsICRuYW1lID0gJycsICRkYl9jb25uID0gRkFMU0UpCiAJewogCQlpZiAoZW1wdHkoJG1vZGVsKSkKIAkJewotCQkJcmV0dXJuOworCQkJcmV0dXJuICR0aGlzOwogCQl9CiAJCWVsc2VpZiAoaXNfYXJyYXkoJG1vZGVsKSkKIAkJewogCQkJZm9yZWFjaCAoJG1vZGVsIGFzICRrZXkgPT4gJHZhbHVlKQogCQkJewotCQkJCSR0aGlzLT5tb2RlbChpc19pbnQoJGtleSkgPyAkdmFsdWUgOiAka2V5LCAkdmFsdWUpOworCQkJCWlzX2ludCgka2V5KSA/ICR0aGlzLT5tb2RlbCgkdmFsdWUsICcnLCAkZGJfY29ubikgOiAkdGhpcy0+bW9kZWwoJGtleSwgJHZhbHVlLCAkZGJfY29ubik7CiAJCQl9Ci0JCQlyZXR1cm47CisKKwkJCXJldHVybiAkdGhpczsKIAkJfQogCiAJCSRwYXRoID0gJyc7CkBAIC0yNTIsNyArMjU1LDcgQEAKIAogCQlpZiAoaW5fYXJyYXkoJG5hbWUsICR0aGlzLT5fY2lfbW9kZWxzLCBUUlVFKSkKIAkJewotCQkJcmV0dXJuOworCQkJcmV0dXJuICR0aGlzOwogCQl9CiAKIAkJJENJID0mIGdldF9pbnN0YW5jZSgpOwpAQCAtMjYxLDcgKzI2NCwyMiBAQAogCQkJc2hvd19lcnJvcignVGhlIG1vZGVsIG5hbWUgeW91IGFyZSBsb2FkaW5nIGlzIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgdGhhdCBpcyBhbHJlYWR5IGJlaW5nIHVzZWQ6ICcuJG5hbWUpOwogCQl9CiAKLQkJJG1vZGVsID0gc3RydG9sb3dlcigkbW9kZWwpOworCQlpZiAoJGRiX2Nvbm4gIT09IEZBTFNFICYmICEgY2xhc3NfZXhpc3RzKCdDSV9EQicsIEZBTFNFKSkKKwkJeworCQkJaWYgKCRkYl9jb25uID09PSBUUlVFKQorCQkJeworCQkJCSRkYl9jb25uID0gJyc7CisJCQl9CisKKwkJCSRDSS0+bG9hZC0+ZGF0YWJhc2UoJGRiX2Nvbm4sIEZBTFNFLCBUUlVFKTsKKwkJfQorCisJCWlmICggISBjbGFzc19leGlzdHMoJ0NJX01vZGVsJywgRkFMU0UpKQorCQl7CisJCQlsb2FkX2NsYXNzKCdNb2RlbCcsICdjb3JlJyk7CisJCX0KKworCQkkbW9kZWwgPSB1Y2ZpcnN0KHN0cnRvbG93ZXIoJG1vZGVsKSk7CiAKIAkJZm9yZWFjaCAoJHRoaXMtPl9jaV9tb2RlbF9wYXRocyBhcyAkbW9kX3BhdGgpCiAJCXsKQEAgLTI3MCwyNyArMjg4LDExIEBACiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCWlmICgkZGJfY29ubiAhPT0gRkFMU0UgJiYgISBjbGFzc19leGlzdHMoJ0NJX0RCJywgRkFMU0UpKQotCQkJewotCQkJCWlmICgkZGJfY29ubiA9PT0gVFJVRSkKLQkJCQl7Ci0JCQkJCSRkYl9jb25uID0gJyc7Ci0JCQkJfQotCi0JCQkJJENJLT5sb2FkLT5kYXRhYmFzZSgkZGJfY29ubiwgRkFMU0UsIFRSVUUpOwotCQkJfQotCi0JCQlpZiAoICEgY2xhc3NfZXhpc3RzKCdDSV9Nb2RlbCcsIEZBTFNFKSkKLQkJCXsKLQkJCQlsb2FkX2NsYXNzKCdNb2RlbCcsICdjb3JlJyk7Ci0JCQl9Ci0KIAkJCXJlcXVpcmVfb25jZSgkbW9kX3BhdGguJ21vZGVscy8nLiRwYXRoLiRtb2RlbC4nLnBocCcpOwogCi0JCQkkbW9kZWwgPSB1Y2ZpcnN0KCRtb2RlbCk7CiAJCQkkQ0ktPiRuYW1lID0gbmV3ICRtb2RlbCgpOwogCQkJJHRoaXMtPl9jaV9tb2RlbHNbXSA9ICRuYW1lOwotCQkJcmV0dXJuOworCQkJcmV0dXJuICR0aGlzOwogCQl9CiAKIAkJLy8gY291bGRuJ3QgZmluZCB0aGUgbW9kZWwKQEAgLTMwNyw4ICszMDksOCBAQAogCSAqIEBwYXJhbQlib29sCSRxdWVyeV9idWlsZGVyCVdoZXRoZXIgdG8gZW5hYmxlIFF1ZXJ5IEJ1aWxkZXIKIAkgKgkJCQkJKG92ZXJyaWRlcyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nKQogCSAqCi0JICogQHJldHVybgl2b2lkfG9iamVjdHxib29sCURhdGFiYXNlIG9iamVjdCBpZiAkcmV0dXJuIGlzIHNldCB0byBUUlVFLAotCSAqCQkJCQlGQUxTRSBvbiBmYWlsdXJlLCB2b2lkIGluIGFueSBvdGhlciBjYXNlCisJICogQHJldHVybglvYmplY3R8Ym9vbAlEYXRhYmFzZSBvYmplY3QgaWYgJHJldHVybiBpcyBzZXQgdG8gVFJVRSwKKwkgKgkJCQkJRkFMU0Ugb24gZmFpbHVyZSwgQ0lfTG9hZGVyIGluc3RhbmNlIGluIGFueSBvdGhlciBjYXNlCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGRhdGFiYXNlKCRwYXJhbXMgPSAnJywgJHJldHVybiA9IEZBTFNFLCAkcXVlcnlfYnVpbGRlciA9IE5VTEwpCiAJewpAQCAtMzM0LDYgKzMzNiw3IEBACiAKIAkJLy8gTG9hZCB0aGUgREIgY2xhc3MKIAkJJENJLT5kYiA9JiBEQigkcGFyYW1zLCAkcXVlcnlfYnVpbGRlcik7CisJCXJldHVybiAkdGhpczsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQyLDggKzM0NSw4IEBACiAJICogTG9hZCB0aGUgRGF0YWJhc2UgVXRpbGl0aWVzIENsYXNzCiAJICoKIAkgKiBAcGFyYW0Jb2JqZWN0CSRkYglEYXRhYmFzZSBvYmplY3QKLQkgKiBAcGFyYW0JYm9vbAkkcmV0dXJuCVdoZXRoZXIgdG8gcmV0dXJuIHRoZSBEQiBGb3JnZSBjbGFzcyBvYmplY3Qgb3Igbm90Ci0JICogQHJldHVybgl2b2lkfG9iamVjdAorCSAqIEBwYXJhbQlib29sCSRyZXR1cm4JV2hldGhlciB0byByZXR1cm4gdGhlIERCIFV0aWxpdGllcyBjbGFzcyBvYmplY3Qgb3Igbm90CisJICogQHJldHVybglvYmplY3QKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gZGJ1dGlsKCRkYiA9IE5VTEwsICRyZXR1cm4gPSBGQUxTRSkKIAl7CkBAIC0zNjUsNiArMzY4LDcgQEAKIAkJfQogCiAJCSRDSS0+ZGJ1dGlsID0gbmV3ICRjbGFzcygkZGIpOworCQlyZXR1cm4gJHRoaXM7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3NCw3ICszNzgsNyBAQAogCSAqCiAJICogQHBhcmFtCW9iamVjdAkkZGIJRGF0YWJhc2Ugb2JqZWN0CiAJICogQHBhcmFtCWJvb2wJJHJldHVybglXaGV0aGVyIHRvIHJldHVybiB0aGUgREIgRm9yZ2UgY2xhc3Mgb2JqZWN0IG9yIG5vdAotCSAqIEByZXR1cm4Jdm9pZHxvYmplY3QKKwkgKiBAcmV0dXJuCW9iamVjdAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBkYmZvcmdlKCRkYiA9IE5VTEwsICRyZXR1cm4gPSBGQUxTRSkKIAl7CkBAIC00MDgsNiArNDEyLDcgQEAKIAkJfQogCiAJCSRDSS0+ZGJmb3JnZSA9IG5ldyAkY2xhc3MoJGRiKTsKKwkJcmV0dXJuICR0aGlzOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MjIsNyArNDI3LDcgQEAKIAkgKgkJCQl0byBiZSBleHRyYWN0ZWQgZm9yIHVzZSBpbiB0aGUgdmlldwogCSAqIEBwYXJhbQlib29sCSRyZXR1cm4JV2hldGhlciB0byByZXR1cm4gdGhlIHZpZXcgb3V0cHV0CiAJICoJCQkJb3IgbGVhdmUgaXQgdG8gdGhlIE91dHB1dCBjbGFzcwotCSAqIEByZXR1cm4Jdm9pZAorCSAqIEByZXR1cm4Jb2JqZWN0fHN0cmluZwogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiB2aWV3KCR2aWV3LCAkdmFycyA9IGFycmF5KCksICRyZXR1cm4gPSBGQUxTRSkKIAl7CkBAIC00MzYsNyArNDQxLDcgQEAKIAkgKgogCSAqIEBwYXJhbQlzdHJpbmcJJHBhdGgJRmlsZSBwYXRoCiAJICogQHBhcmFtCWJvb2wJJHJldHVybglXaGV0aGVyIHRvIHJldHVybiB0aGUgZmlsZSBvdXRwdXQKLQkgKiBAcmV0dXJuCXZvaWR8c3RyaW5nCisJICogQHJldHVybglvYmplY3R8c3RyaW5nCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGZpbGUoJHBhdGgsICRyZXR1cm4gPSBGQUxTRSkKIAl7CkBAIC00NTUsOSArNDYwLDkgQEAKIAkgKgkJCQkJQW4gYXNzb2NpYXRpdmUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWVzCiAJICoJCQkJCXRvIGJlIHNldCwgb3IgYSB2YWx1ZSdzIG5hbWUgaWYgc3RyaW5nCiAJICogQHBhcmFtIAlzdHJpbmcJJHZhbAlWYWx1ZSB0byBzZXQsIG9ubHkgdXNlZCBpZiAkdmFycyBpcyBhIHN0cmluZwotCSAqIEByZXR1cm4Jdm9pZAorCSAqIEByZXR1cm4Jb2JqZWN0CiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHZhcnMoJHZhcnMgPSBhcnJheSgpLCAkdmFsID0gJycpCisJcHVibGljIGZ1bmN0aW9uIHZhcnMoJHZhcnMsICR2YWwgPSAnJykKIAl7CiAJCWlmIChpc19zdHJpbmcoJHZhcnMpKQogCQl7CkBAIC00NzMsNiArNDc4LDIzIEBACiAJCQkJJHRoaXMtPl9jaV9jYWNoZWRfdmFyc1ska2V5XSA9ICR2YWw7CiAJCQl9CiAJCX0KKworCQlyZXR1cm4gJHRoaXM7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgorCSAqIENsZWFyIENhY2hlZCBWYXJpYWJsZXMKKwkgKgorCSAqIENsZWFycyB0aGUgY2FjaGVkIHZhcmlhYmxlcy4KKwkgKgorCSAqIEByZXR1cm4gIG9iamVjdAorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBjbGVhcl92YXJzKCkKKwl7CisJCSR0aGlzLT5fY2lfY2FjaGVkX3ZhcnMgPSBhcnJheSgpOworCQlyZXR1cm4gJHRoaXM7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUxMCw3ICs1MzIsNyBAQAogCSAqIEhlbHBlciBMb2FkZXIKIAkgKgogCSAqIEBwYXJhbQlzdHJpbmd8c3RyaW5nW10JJGhlbHBlcnMJSGVscGVyIG5hbWUocykKLQkgKiBAcmV0dXJuCXZvaWQKKwkgKiBAcmV0dXJuCW9iamVjdAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBoZWxwZXIoJGhlbHBlcnMgPSBhcnJheSgpKQogCXsKQEAgLTU2Nyw2ICs1ODksOCBAQAogCQkJCXNob3dfZXJyb3IoJ1VuYWJsZSB0byBsb2FkIHRoZSByZXF1ZXN0ZWQgZmlsZTogaGVscGVycy8nLiRoZWxwZXIuJy5waHAnKTsKIAkJCX0KIAkJfQorCisJCXJldHVybiAkdGhpczsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTc5LDExICs2MDMsMTEgQEAKIAkgKgogCSAqIEB1c2VzCUNJX0xvYWRlcjo6aGVscGVyKCkKIAkgKiBAcGFyYW0Jc3RyaW5nfHN0cmluZ1tdCSRoZWxwZXJzCUhlbHBlciBuYW1lKHMpCi0JICogQHJldHVybgl2b2lkCisJICogQHJldHVybglvYmplY3QKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gaGVscGVycygkaGVscGVycyA9IGFycmF5KCkpCiAJewotCQkkdGhpcy0+aGVscGVyKCRoZWxwZXJzKTsKKwkJcmV0dXJuICR0aGlzLT5oZWxwZXIoJGhlbHBlcnMpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01OTUsMTggKzYxOSwxOSBAQAogCSAqCiAJICogQHBhcmFtCXN0cmluZ3xzdHJpbmdbXQkkZmlsZXMJTGlzdCBvZiBsYW5ndWFnZSBmaWxlIG5hbWVzIHRvIGxvYWQKIAkgKiBAcGFyYW0Jc3RyaW5nCQlMYW5ndWFnZSBuYW1lCi0JICogQHJldHVybgl2b2lkCisJICogQHJldHVybglvYmplY3QKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gbGFuZ3VhZ2UoJGZpbGVzID0gYXJyYXkoKSwgJGxhbmcgPSAnJykKKwlwdWJsaWMgZnVuY3Rpb24gbGFuZ3VhZ2UoJGZpbGVzLCAkbGFuZyA9ICcnKQogCXsKIAkJJENJID0mIGdldF9pbnN0YW5jZSgpOwotCiAJCWlzX2FycmF5KCRmaWxlcykgT1IgJGZpbGVzID0gYXJyYXkoJGZpbGVzKTsKIAogCQlmb3JlYWNoICgkZmlsZXMgYXMgJGxhbmdmaWxlKQogCQl7CiAJCQkkQ0ktPmxhbmctPmxvYWQoJGxhbmdmaWxlLCAkbGFuZyk7CiAJCX0KKworCQlyZXR1cm4gJHRoaXM7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYyMiwxMCArNjQ3LDkgQEAKIAkgKiBAcGFyYW0JYm9vbAkkZmFpbF9ncmFjZWZ1bGx5CVdoZXRoZXIgdG8ganVzdCByZXR1cm4gRkFMU0Ugb3IgZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlCiAJICogQHJldHVybglib29sCVRSVUUgaWYgdGhlIGZpbGUgd2FzIGxvYWRlZCBjb3JyZWN0bHkgb3IgRkFMU0Ugb24gZmFpbHVyZQogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBjb25maWcoJGZpbGUgPSAnJywgJHVzZV9zZWN0aW9ucyA9IEZBTFNFLCAkZmFpbF9ncmFjZWZ1bGx5ID0gRkFMU0UpCisJcHVibGljIGZ1bmN0aW9uIGNvbmZpZygkZmlsZSwgJHVzZV9zZWN0aW9ucyA9IEZBTFNFLCAkZmFpbF9ncmFjZWZ1bGx5ID0gRkFMU0UpCiAJewotCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7Ci0JCXJldHVybiAkQ0ktPmNvbmZpZy0+bG9hZCgkZmlsZSwgJHVzZV9zZWN0aW9ucywgJGZhaWxfZ3JhY2VmdWxseSk7CisJCXJldHVybiBnZXRfaW5zdGFuY2UoKS0+Y29uZmlnLT5sb2FkKCRmaWxlLCAkdXNlX3NlY3Rpb25zLCAkZmFpbF9ncmFjZWZ1bGx5KTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjM5LDEwICs2NjMsMTAgQEAKIAkgKiBAcGFyYW0JYXJyYXkJCSRwYXJhbXMJCU9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgZHJpdmVyCiAJICogQHBhcmFtCXN0cmluZwkJJG9iamVjdF9uYW1lCUFuIG9wdGlvbmFsIG9iamVjdCBuYW1lIHRvIGFzc2lnbiB0bwogCSAqCi0JICogQHJldHVybgl2b2lkfG9iamVjdHxib29sCU9iamVjdCBvciBGQUxTRSBvbiBmYWlsdXJlIGlmICRsaWJyYXJ5IGlzIGEgc3RyaW5nCi0JICoJCQkJCWFuZCAkb2JqZWN0X25hbWUgaXMgc2V0LiB2b2lkIG90aGVyd2lzZS4KKwkgKiBAcmV0dXJuCW9iamVjdHxib29sCU9iamVjdCBvciBGQUxTRSBvbiBmYWlsdXJlIGlmICRsaWJyYXJ5IGlzIGEgc3RyaW5nCisJICoJCQkJYW5kICRvYmplY3RfbmFtZSBpcyBzZXQuIENJX0xvYWRlciBpbnN0YW5jZSBvdGhlcndpc2UuCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIGRyaXZlcigkbGlicmFyeSA9ICcnLCAkcGFyYW1zID0gTlVMTCwgJG9iamVjdF9uYW1lID0gTlVMTCkKKwlwdWJsaWMgZnVuY3Rpb24gZHJpdmVyKCRsaWJyYXJ5LCAkcGFyYW1zID0gTlVMTCwgJG9iamVjdF9uYW1lID0gTlVMTCkKIAl7CiAJCWlmIChpc19hcnJheSgkbGlicmFyeSkpCiAJCXsKQEAgLTY1MCwxMCArNjc0LDEwIEBACiAJCQl7CiAJCQkJJHRoaXMtPmRyaXZlcigkZHJpdmVyKTsKIAkJCX0KLQkJCXJldHVybjsKLQkJfQogCi0JCWlmICgkbGlicmFyeSA9PT0gJycpCisJCQlyZXR1cm4gJHRoaXM7CisJCX0KKwkJZWxzZWlmIChlbXB0eSgkbGlicmFyeSkpCiAJCXsKIAkJCXJldHVybiBGQUxTRTsKIAkJfQpAQCAtNjg5LDcgKzcxMyw3IEBACiAJICoKIAkgKiBAcGFyYW0Jc3RyaW5nCSRwYXRoCQlQYXRoIHRvIGFkZAogCSAqIEBwYXJhbSAJYm9vbAkkdmlld19jYXNjYWRlCShkZWZhdWx0OiBUUlVFKQotCSAqIEByZXR1cm4Jdm9pZAorCSAqIEByZXR1cm4Jb2JqZWN0CiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGFkZF9wYWNrYWdlX3BhdGgoJHBhdGgsICR2aWV3X2Nhc2NhZGUgPSBUUlVFKQogCXsKQEAgLTcwNCw2ICs3MjgsOCBAQAogCQkvLyBBZGQgY29uZmlnIGZpbGUgcGF0aAogCQkkY29uZmlnID0mICR0aGlzLT5fY2lfZ2V0X2NvbXBvbmVudCgnY29uZmlnJyk7CiAJCSRjb25maWctPl9jb25maWdfcGF0aHNbXSA9ICRwYXRoOworCisJCXJldHVybiAkdGhpczsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzMxLDcgKzc1Nyw3IEBACiAJICogYWRkZWQgcGF0aCB3aWxsIGJlIHJlbW92ZWQgcmVtb3ZlZC4KIAkgKgogCSAqIEBwYXJhbQlzdHJpbmcJJHBhdGgJUGF0aCB0byByZW1vdmUKLQkgKiBAcmV0dXJuCXZvaWQKKwkgKiBAcmV0dXJuCW9iamVjdAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiByZW1vdmVfcGFja2FnZV9wYXRoKCRwYXRoID0gJycpCiAJewpAQCAtNzczLDYgKzc5OSw4IEBACiAJCSR0aGlzLT5fY2lfbW9kZWxfcGF0aHMgPSBhcnJheV91bmlxdWUoYXJyYXlfbWVyZ2UoJHRoaXMtPl9jaV9tb2RlbF9wYXRocywgYXJyYXkoQVBQUEFUSCkpKTsKIAkJJHRoaXMtPl9jaV92aWV3X3BhdGhzID0gYXJyYXlfbWVyZ2UoJHRoaXMtPl9jaV92aWV3X3BhdGhzLCBhcnJheShBUFBQQVRILid2aWV3cy8nID0+IFRSVUUpKTsKIAkJJGNvbmZpZy0+X2NvbmZpZ19wYXRocyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgkY29uZmlnLT5fY29uZmlnX3BhdGhzLCBhcnJheShBUFBQQVRIKSkpOworCisJCXJldHVybiAkdGhpczsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzg4LDcgKzgxNiw3IEBACiAJICogQHVzZWQtYnkJQ0lfTG9hZGVyOjp2aWV3KCkKIAkgKiBAdXNlZC1ieQlDSV9Mb2FkZXI6OmZpbGUoKQogCSAqIEBwYXJhbQlhcnJheQkkX2NpX2RhdGEJRGF0YSB0byBsb2FkCi0JICogQHJldHVybgl2b2lkCisJICogQHJldHVybglvYmplY3QKIAkgKi8KIAlwcm90ZWN0ZWQgZnVuY3Rpb24gX2NpX2xvYWQoJF9jaV9kYXRhKQogCXsKQEAgLTkxMiw2ICs5NDAsOCBAQAogCQkJJF9jaV9DSS0+b3V0cHV0LT5hcHBlbmRfb3V0cHV0KG9iX2dldF9jb250ZW50cygpKTsKIAkJCUBvYl9lbmRfY2xlYW4oKTsKIAkJfQorCisJCXJldHVybiAkdGhpczsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTExOCwzMCArMTE0OCwzNSBAQAogCiAJCS8vIFNldCB0aGUgdmFyaWFibGUgbmFtZSB3ZSB3aWxsIGFzc2lnbiB0aGUgY2xhc3MgdG8KIAkJLy8gV2FzIGEgY3VzdG9tIGNsYXNzIG5hbWUgc3VwcGxpZWQ/IElmIHNvIHdlJ2xsIHVzZSBpdAotCQkkY2xhc3MgPSBzdHJ0b2xvd2VyKCRjbGFzcyk7Ci0KLQkJaWYgKCRvYmplY3RfbmFtZSA9PT0gTlVMTCkKKwkJaWYgKGVtcHR5KCRvYmplY3RfbmFtZSkpCiAJCXsKLQkJCSRjbGFzc3ZhciA9IGlzc2V0KCR0aGlzLT5fY2lfdmFybWFwWyRjbGFzc10pID8gJHRoaXMtPl9jaV92YXJtYXBbJGNsYXNzXSA6ICRjbGFzczsKKwkJCSRvYmplY3RfbmFtZSA9IHN0cnRvbG93ZXIoJGNsYXNzKTsKKwkJCWlmIChpc3NldCgkdGhpcy0+X2NpX3Zhcm1hcFskb2JqZWN0X25hbWVdKSkKKwkJCXsKKwkJCQkkb2JqZWN0X25hbWUgPSAkdGhpcy0+X2NpX3Zhcm1hcFskb2JqZWN0X25hbWVdOworCQkJfQogCQl9Ci0JCWVsc2UKKworCQkvLyBEb24ndCBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcworCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7CisJCWlmIChpc3NldCgkQ0ktPiRvYmplY3RfbmFtZSkpCiAJCXsKLQkJCSRjbGFzc3ZhciA9ICRvYmplY3RfbmFtZTsKKwkJCWlmICgkQ0ktPiRvYmplY3RfbmFtZSBpbnN0YW5jZW9mICRuYW1lKQorCQkJeworCQkJCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICRjbGFzcy4iIGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFudGlhdGVkIGFzICciLiRvYmplY3RfbmFtZS4iJy4gU2Vjb25kIGF0dGVtcHQgYWJvcnRlZC4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCXNob3dfZXJyb3IoIlJlc291cmNlICciLiRvYmplY3RfbmFtZS4iJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgIi4kY2xhc3MuIiBpbnN0YW5jZS4iKTsKIAkJfQogCiAJCS8vIFNhdmUgdGhlIGNsYXNzIG5hbWUgYW5kIG9iamVjdCBuYW1lCi0JCSR0aGlzLT5fY2lfY2xhc3Nlc1skY2xhc3NdID0gJGNsYXNzdmFyOworCQkkdGhpcy0+X2NpX2NsYXNzZXNbJG9iamVjdF9uYW1lXSA9ICRjbGFzczsKIAogCQkvLyBJbnN0YW50aWF0ZSB0aGUgY2xhc3MKLQkJJENJID0mIGdldF9pbnN0YW5jZSgpOwotCQlpZiAoJGNvbmZpZyAhPT0gTlVMTCkKLQkJewotCQkJJENJLT4kY2xhc3N2YXIgPSBuZXcgJG5hbWUoJGNvbmZpZyk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkkQ0ktPiRjbGFzc3ZhciA9IG5ldyAkbmFtZSgpOwotCQl9CisJCSRDSS0+JG9iamVjdF9uYW1lID0gaXNzZXQoJGNvbmZpZykKKwkJCT8gbmV3ICRuYW1lKCRjb25maWcpCisJCQk6IG5ldyAkbmFtZSgpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTk4LDYgKzEyMzMsMTUgQEAKIAkJCX0KIAkJfQogCisJCS8vIEF1dG9sb2FkIGRyaXZlcnMKKwkJaWYgKGlzc2V0KCRhdXRvbG9hZFsnZHJpdmVycyddKSkKKwkJeworCQkJZm9yZWFjaCAoJGF1dG9sb2FkWydkcml2ZXJzJ10gYXMgJGl0ZW0pCisJCQl7CisJCQkJJHRoaXMtPmRyaXZlcigkaXRlbSk7CisJCQl9CisJCX0KKwogCQkvLyBMb2FkIGxpYnJhcmllcwogCQlpZiAoaXNzZXQoJGF1dG9sb2FkWydsaWJyYXJpZXMnXSkgJiYgY291bnQoJGF1dG9sb2FkWydsaWJyYXJpZXMnXSkgPiAwKQogCQl7CkBAIC0xMjE1LDE1ICsxMjU5LDYgQEAKIAkJCX0KIAkJfQogCi0JCS8vIEF1dG9sb2FkIGRyaXZlcnMKLQkJaWYgKGlzc2V0KCRhdXRvbG9hZFsnZHJpdmVycyddKSkKLQkJewotCQkJZm9yZWFjaCAoJGF1dG9sb2FkWydkcml2ZXJzJ10gYXMgJGl0ZW0pCi0JCQl7Ci0JCQkJJHRoaXMtPmRyaXZlcigkaXRlbSk7Ci0JCQl9Ci0JCX0KLQogCQkvLyBBdXRvbG9hZCBtb2RlbHMKIAkJaWYgKGlzc2V0KCRhdXRvbG9hZFsnbW9kZWwnXSkpCiAJCXsKZGlmZiAtLWdpdCBhL3N5c3RlbS9jb3JlL0xvZy5waHAgYi9zeXN0ZW0vY29yZS9Mb2cucGhwCmluZGV4IGU0ZDcyYjUuLjYzZmVmMjAgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9jb3JlL0xvZy5waHAKKysrIGIvc3lzdGVtL2NvcmUvTG9nLnBocApAQCAtMTQwLDEwICsxNDAsOSBAQAogCSAqCiAJICogQHBhcmFtCXN0cmluZwl0aGUgZXJyb3IgbGV2ZWw6ICdlcnJvcicsICdkZWJ1Zycgb3IgJ2luZm8nCiAJICogQHBhcmFtCXN0cmluZwl0aGUgZXJyb3IgbWVzc2FnZQotCSAqIEBwYXJhbQlib29sCXdoZXRoZXIgdGhlIGVycm9yIGlzIGEgbmF0aXZlIFBIUCBlcnJvcgogCSAqIEByZXR1cm4JYm9vbAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiB3cml0ZV9sb2coJGxldmVsLCAkbXNnLCAkcGhwX2Vycm9yID0gRkFMU0UpCisJcHVibGljIGZ1bmN0aW9uIHdyaXRlX2xvZygkbGV2ZWwsICRtc2cpCiAJewogCQlpZiAoJHRoaXMtPl9lbmFibGVkID09PSBGQUxTRSkKIAkJewpAQCAtMTc2LDEwICsxNzUsMTggQEAKIAkJCXJldHVybiBGQUxTRTsKIAkJfQogCi0JCSRtZXNzYWdlIC49ICRsZXZlbC4nICcuKCRsZXZlbCA9PT0gJ0lORk8nID8gJyAtJyA6ICctJykuJyAnLmRhdGUoJHRoaXMtPl9kYXRlX2ZtdCkuJyAtLT4gJy4kbXNnLiJcbiI7CisJCSRtZXNzYWdlIC49ICRsZXZlbC4nIC0gJy5kYXRlKCR0aGlzLT5fZGF0ZV9mbXQpLicgLS0+ICcuJG1zZy4iXG4iOwogCiAJCWZsb2NrKCRmcCwgTE9DS19FWCk7Ci0JCWZ3cml0ZSgkZnAsICRtZXNzYWdlKTsKKworCQlmb3IgKCR3cml0dGVuID0gMCwgJGxlbmd0aCA9IHN0cmxlbigkbWVzc2FnZSk7ICR3cml0dGVuIDwgJGxlbmd0aDsgJHdyaXR0ZW4gKz0gJHJlc3VsdCkKKwkJeworCQkJaWYgKCgkcmVzdWx0ID0gZndyaXRlKCRmcCwgc3Vic3RyKCRtZXNzYWdlLCAkd3JpdHRlbikpKSA9PT0gRkFMU0UpCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwogCQlmbG9jaygkZnAsIExPQ0tfVU4pOwogCQlmY2xvc2UoJGZwKTsKIApAQCAtMTg4LDcgKzE5NSw3IEBACiAJCQlAY2htb2QoJGZpbGVwYXRoLCBGSUxFX1dSSVRFX01PREUpOwogCQl9CiAKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiBpc19pbnQoJHJlc3VsdCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9zeXN0ZW0vY29yZS9Nb2RlbC5waHAgYi9zeXN0ZW0vY29yZS9Nb2RlbC5waHAKaW5kZXggMWViNmY5MC4uMTFlNjA3NSAxMDA2NDQKLS0tIGEvc3lzdGVtL2NvcmUvTW9kZWwucGhwCisrKyBiL3N5c3RlbS9jb3JlL01vZGVsLnBocApAQCAtNTksOCArNTksNyBAQAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogCXsKLQkJJENJID0mIGdldF9pbnN0YW5jZSgpOwotCQlyZXR1cm4gJENJLT4ka2V5OworCQlyZXR1cm4gZ2V0X2luc3RhbmNlKCktPiRrZXk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9zeXN0ZW0vY29yZS9PdXRwdXQucGhwIGIvc3lzdGVtL2NvcmUvT3V0cHV0LnBocAppbmRleCAwNmQ3YTg2Li4yYWQ4ZTkwIDEwMDY0NAotLS0gYS9zeXN0ZW0vY29yZS9PdXRwdXQucGhwCisrKyBiL3N5c3RlbS9jb3JlL091dHB1dC5waHAKQEAgLTU4LDIxICs1OCwyMSBAQAogCSAqCiAJICogQHZhcglhcnJheQogCSAqLwotCXB1YmxpYyAkaGVhZGVycyA9CWFycmF5KCk7CisJcHVibGljICRoZWFkZXJzID0gYXJyYXkoKTsKIAogCS8qKgogCSAqIExpc3Qgb2YgbWltZSB0eXBlcwogCSAqCiAJICogQHZhcglhcnJheQogCSAqLwotCXB1YmxpYyAkbWltZXMgPQkJYXJyYXkoKTsKKwlwdWJsaWMgJG1pbWVzID0JYXJyYXkoKTsKIAogCS8qKgogCSAqIE1pbWUtdHlwZSBmb3IgdGhlIGN1cnJlbnQgcGFnZQogCSAqCiAJICogQHZhcglzdHJpbmcKIAkgKi8KLQlwcm90ZWN0ZWQgJG1pbWVfdHlwZQk9ICd0ZXh0L2h0bWwnOworCXByb3RlY3RlZCAkbWltZV90eXBlID0gJ3RleHQvaHRtbCc7CiAKIAkvKioKIAkgKiBFbmFibGUgUHJvZmlsZXIgZmxhZwpAQCAtODIsMTEgKzgyLDE4IEBACiAJcHVibGljICRlbmFibGVfcHJvZmlsZXIgPSBGQUxTRTsKIAogCS8qKgotCSAqIHpMaWIgb3V0cHV0IGNvbXByZXNzaW9uIGZsYWcKKwkgKiBwaHAuaW5pIHpsaWIub3V0cHV0X2NvbXByZXNzaW9uIGZsYWcKIAkgKgogCSAqIEB2YXIJYm9vbAogCSAqLwotCXByb3RlY3RlZCAkX3psaWJfb2MgPQkJRkFMU0U7CisJcHJvdGVjdGVkICRfemxpYl9vYyA9IEZBTFNFOworCisJLyoqCisJICogQ0kgb3V0cHV0IGNvbXByZXNzaW9uIGZsYWcKKwkgKgorCSAqIEB2YXIJYm9vbAorCSAqLworCXByb3RlY3RlZCAkX2NvbXByZXNzX291dHB1dCA9IEZBTFNFOwogCiAJLyoqCiAJICogTGlzdCBvZiBwcm9maWxlciBzZWN0aW9ucwpAQCAtMTAyLDcgKzEwOSw3IEBACiAJICoKIAkgKiBAdmFyCWJvb2wKIAkgKi8KLQlwdWJsaWMgJHBhcnNlX2V4ZWNfdmFycyA9CVRSVUU7CisJcHVibGljICRwYXJzZV9leGVjX3ZhcnMgPSBUUlVFOwogCiAJLyoqCiAJICogQ2xhc3MgY29uc3RydWN0b3IKQEAgLTExNCw2ICsxMjEsMTEgQEAKIAlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogCXsKIAkJJHRoaXMtPl96bGliX29jID0gKGJvb2wpIEBpbmlfZ2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicpOworCQkkdGhpcy0+X2NvbXByZXNzX291dHB1dCA9ICgKKwkJCSR0aGlzLT5femxpYl9vYyA9PT0gRkFMU0UKKwkJCSYmIGNvbmZpZ19pdGVtKCdjb21wcmVzc19vdXRwdXQnKSA9PT0gVFJVRQorCQkJJiYgZXh0ZW5zaW9uX2xvYWRlZCgnemxpYicpCisJCSk7CiAKIAkJLy8gR2V0IG1pbWUgdHlwZXMgZm9yIGxhdGVyCiAJCSR0aGlzLT5taW1lcyA9JiBnZXRfbWltZXMoKTsKQEAgLTQzNiwxNSArNDQ4LDE0IEBACiAJCWlmICgkdGhpcy0+cGFyc2VfZXhlY192YXJzID09PSBUUlVFKQogCQl7CiAJCQkkbWVtb3J5CT0gcm91bmQobWVtb3J5X2dldF91c2FnZSgpIC8gMTAyNCAvIDEwMjQsIDIpLidNQic7Ci0KIAkJCSRvdXRwdXQgPSBzdHJfcmVwbGFjZShhcnJheSgne2VsYXBzZWRfdGltZX0nLCAne21lbW9yeV91c2FnZX0nKSwgYXJyYXkoJGVsYXBzZWQsICRtZW1vcnkpLCAkb3V0cHV0KTsKIAkJfQogCiAJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkJLy8gSXMgY29tcHJlc3Npb24gcmVxdWVzdGVkPwotCQlpZiAoJENGRy0+aXRlbSgnY29tcHJlc3Nfb3V0cHV0JykgPT09IFRSVUUgJiYgJHRoaXMtPl96bGliX29jID09PSBGQUxTRQotCQkJJiYgZXh0ZW5zaW9uX2xvYWRlZCgnemxpYicpCisJCWlmIChpc3NldCgkQ0kpIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSBub3Qgc2VydmluZyBhIGNhY2hlIGZpbGUsIGlmIHdlIHdlcmUsIGl0IHdvdWxkIGFscmVhZHkgYmUgY29tcHJlc3NlZAorCQkJJiYgJHRoaXMtPl9jb21wcmVzc19vdXRwdXQgPT09IFRSVUUKIAkJCSYmIGlzc2V0KCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9FTkNPRElORyddKSAmJiBzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0VOQ09ESU5HJ10sICdnemlwJykgIT09IEZBTFNFKQogCQl7CiAJCQlvYl9zdGFydCgnb2JfZ3poYW5kbGVyJyk7CkBAIC00NjgsNiArNDc5LDIxIEBACiAJCS8vIHNpbXBseSBlY2hvIG91dCB0aGUgZGF0YSBhbmQgZXhpdC4KIAkJaWYgKCAhIGlzc2V0KCRDSSkpCiAJCXsKKwkJCWlmICgkdGhpcy0+X2NvbXByZXNzX291dHB1dCA9PT0gVFJVRSkKKwkJCXsKKwkJCQlpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0VOQ09ESU5HJ10pICYmIHN0cnBvcygkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfRU5DT0RJTkcnXSwgJ2d6aXAnKSAhPT0gRkFMU0UpCisJCQkJeworCQkJCQloZWFkZXIoJ0NvbnRlbnQtRW5jb2Rpbmc6IGd6aXAnKTsKKwkJCQkJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJG91dHB1dCkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBVc2VyIGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCBnemlwIGNvbXByZXNzaW9uLAorCQkJCQkvLyBzbyB3ZSdsbCBoYXZlIHRvIGRlY29tcHJlc3Mgb3VyIGNhY2hlCisJCQkJCSRvdXRwdXQgPSBnemluZmxhdGUoc3Vic3RyKCRvdXRwdXQsIDEwLCAtOCkpOworCQkJCX0KKwkJCX0KKwogCQkJZWNobyAkb3V0cHV0OwogCQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ0ZpbmFsIG91dHB1dCBzZW50IHRvIGJyb3dzZXInKTsKIAkJCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICdUb3RhbCBleGVjdXRpb24gdGltZTogJy4kZWxhcHNlZCk7CkBAIC01MzAsOSArNTU2LDkgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCSR1cmkgPQkkQ0ktPmNvbmZpZy0+aXRlbSgnYmFzZV91cmwnKS4KLQkJCQkkQ0ktPmNvbmZpZy0+aXRlbSgnaW5kZXhfcGFnZScpLgotCQkJCSRDSS0+dXJpLT51cmlfc3RyaW5nKCk7CisJCSR1cmkgPSAkQ0ktPmNvbmZpZy0+aXRlbSgnYmFzZV91cmwnKQorCQkJLiRDSS0+Y29uZmlnLT5pdGVtKCdpbmRleF9wYWdlJykKKwkJCS4kQ0ktPnVyaS0+dXJpX3N0cmluZygpOwogCiAJCSRjYWNoZV9wYXRoIC49IG1kNSgkdXJpKTsKIApAQCAtNTQyLDE3ICs1NjgsMzkgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCSRleHBpcmUgPSB0aW1lKCkgKyAoJHRoaXMtPmNhY2hlX2V4cGlyYXRpb24gKiA2MCk7Ci0KLQkJLy8gUHV0IHRvZ2V0aGVyIG91ciBzZXJpYWxpemVkIGluZm8uCi0JCSRjYWNoZV9pbmZvID0gc2VyaWFsaXplKGFycmF5KAotCQkJJ2V4cGlyZScJPT4gJGV4cGlyZSwKLQkJCSdoZWFkZXJzJwk9PiAkdGhpcy0+aGVhZGVycwotCQkpKTsKLQogCQlpZiAoZmxvY2soJGZwLCBMT0NLX0VYKSkKIAkJewotCQkJZndyaXRlKCRmcCwgJGNhY2hlX2luZm8uJ0VORENJLS0tPicuJG91dHB1dCk7CisJCQkvLyBJZiBvdXRwdXQgY29tcHJlc3Npb24gaXMgZW5hYmxlZCwgY29tcHJlc3MgdGhlIGNhY2hlCisJCQkvLyBpdHNlbGYsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IGVhY2ggdGltZQorCQkJLy8gd2UncmUgc2VydmluZyBpdAorCQkJaWYgKCR0aGlzLT5fY29tcHJlc3Nfb3V0cHV0ID09PSBUUlVFKQorCQkJeworCQkJCSRvdXRwdXQgPSBnemVuY29kZSgkb3V0cHV0KTsKKworCQkJCWlmICgkdGhpcy0+Z2V0X2hlYWRlcignY29udGVudC10eXBlJykgPT09IE5VTEwpCisJCQkJeworCQkJCQkkdGhpcy0+c2V0X2NvbnRlbnRfdHlwZSgkdGhpcy0+bWltZV90eXBlKTsKKwkJCQl9CisJCQl9CisKKwkJCSRleHBpcmUgPSB0aW1lKCkgKyAoJHRoaXMtPmNhY2hlX2V4cGlyYXRpb24gKiA2MCk7CisKKwkJCS8vIFB1dCB0b2dldGhlciBvdXIgc2VyaWFsaXplZCBpbmZvLgorCQkJJGNhY2hlX2luZm8gPSBzZXJpYWxpemUoYXJyYXkoCisJCQkJJ2V4cGlyZScJPT4gJGV4cGlyZSwKKwkJCQknaGVhZGVycycJPT4gJHRoaXMtPmhlYWRlcnMKKwkJCSkpOworCisJCQkkb3V0cHV0ID0gJGNhY2hlX2luZm8uJ0VORENJLS0tPicuJG91dHB1dDsKKworCQkJZm9yICgkd3JpdHRlbiA9IDAsICRsZW5ndGggPSBzdHJsZW4oJG91dHB1dCk7ICR3cml0dGVuIDwgJGxlbmd0aDsgJHdyaXR0ZW4gKz0gJHJlc3VsdCkKKwkJCXsKKwkJCQlpZiAoKCRyZXN1bHQgPSBmd3JpdGUoJGZwLCBzdWJzdHIoJG91dHB1dCwgJHdyaXR0ZW4pKSkgPT09IEZBTFNFKQorCQkJCXsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCiAJCQlmbG9jaygkZnAsIExPQ0tfVU4pOwogCQl9CiAJCWVsc2UKQEAgLTU2MCwxMyArNjA4LDIyIEBACiAJCQlsb2dfbWVzc2FnZSgnZXJyb3InLCAnVW5hYmxlIHRvIHNlY3VyZSBhIGZpbGUgbG9jayBmb3IgZmlsZSBhdDogJy4kY2FjaGVfcGF0aCk7CiAJCQlyZXR1cm47CiAJCX0KKwogCQlmY2xvc2UoJGZwKTsKLQkJQGNobW9kKCRjYWNoZV9wYXRoLCBGSUxFX1dSSVRFX01PREUpOwogCi0JCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICdDYWNoZSBmaWxlIHdyaXR0ZW46ICcuJGNhY2hlX3BhdGgpOworCQlpZiAoaXNfaW50KCRyZXN1bHQpKQorCQl7CisJCQlAY2htb2QoJGNhY2hlX3BhdGgsIEZJTEVfV1JJVEVfTU9ERSk7CisJCQlsb2dfbWVzc2FnZSgnZGVidWcnLCAnQ2FjaGUgZmlsZSB3cml0dGVuOiAnLiRjYWNoZV9wYXRoKTsKIAotCQkvLyBTZW5kIEhUVFAgY2FjaGUtY29udHJvbCBoZWFkZXJzIHRvIGJyb3dzZXIgdG8gbWF0Y2ggZmlsZSBjYWNoZSBzZXR0aW5ncy4KLQkJJHRoaXMtPnNldF9jYWNoZV9oZWFkZXIoJF9TRVJWRVJbJ1JFUVVFU1RfVElNRSddLCAkZXhwaXJlKTsKKwkJCS8vIFNlbmQgSFRUUCBjYWNoZS1jb250cm9sIGhlYWRlcnMgdG8gYnJvd3NlciB0byBtYXRjaCBmaWxlIGNhY2hlIHNldHRpbmdzLgorCQkJJHRoaXMtPnNldF9jYWNoZV9oZWFkZXIoJF9TRVJWRVJbJ1JFUVVFU1RfVElNRSddLCAkZXhwaXJlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUB1bmxpbmsoJGNhY2hlX3BhdGgpOworCQkJbG9nX21lc3NhZ2UoJ2Vycm9yJywgJ1VuYWJsZSB0byB3cml0ZSB0aGUgY29tcGxldGUgY2FjaGUgY29udGVudCBhdDogJy4kY2FjaGVfcGF0aCk7CisJCX0KIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzAxLDcgKzc1OCw3IEBACiAJCWVsc2UKIAkJewogCQkJaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOwotCQkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtYXgtYWdlPScgLiAkbWF4X2FnZSAuICcsIHB1YmxpYycpOworCQkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtYXgtYWdlPScuJG1heF9hZ2UuJywgcHVibGljJyk7CiAJCQloZWFkZXIoJ0V4cGlyZXM6ICcuZ21kYXRlKCdELCBkIE0gWSBIOmk6cycsICRleHBpcmF0aW9uKS4nIEdNVCcpOwogCQkJaGVhZGVyKCdMYXN0LW1vZGlmaWVkOiAnLmdtZGF0ZSgnRCwgZCBNIFkgSDppOnMnLCAkbGFzdF9tb2RpZmllZCkuJyBHTVQnKTsKIAkJfQpAQCAtNzQwLDEzICs3OTcsMTMgQEAKIAkJCQlwcmVnX21hdGNoX2FsbCgnezxzdHlsZS4rPC9zdHlsZT59bXNVJywgJG91dHB1dCwgJHN0eWxlX2NsZWFuKTsKIAkJCQlmb3JlYWNoICgkc3R5bGVfY2xlYW5bMF0gYXMgJHMpCiAJCQkJewotCQkJCQkkb3V0cHV0ID0gc3RyX3JlcGxhY2UoJHMsICR0aGlzLT5fbWluaWZ5X3NjcmlwdF9zdHlsZSgkcywgVFJVRSksICRvdXRwdXQpOworCQkJCQkkb3V0cHV0ID0gc3RyX3JlcGxhY2UoJHMsICR0aGlzLT5fbWluaWZ5X2pzX2NzcygkcywgJ2NzcycsIFRSVUUpLCAkb3V0cHV0KTsKIAkJCQl9CiAKIAkJCQkvLyBNaW5pZnkgdGhlIGphdmFzY3JpcHQgaW4gPHNjcmlwdD4gdGFncy4KIAkJCQlmb3JlYWNoICgkamF2YXNjcmlwdF9jbGVhblswXSBhcyAkcykKIAkJCQl7Ci0JCQkJCSRqYXZhc2NyaXB0X21pbmlbXSA9ICR0aGlzLT5fbWluaWZ5X3NjcmlwdF9zdHlsZSgkcywgVFJVRSk7CisJCQkJCSRqYXZhc2NyaXB0X21pbmlbXSA9ICR0aGlzLT5fbWluaWZ5X2pzX2NzcygkcywgJ2pzJywgVFJVRSk7CiAJCQkJfQogCiAJCQkJLy8gUmVwbGFjZSBtdWx0aXBsZSBzcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZS4KQEAgLTc5MiwxMyArODQ5LDE0IEBACiAJCQlicmVhazsKIAogCQkJY2FzZSAndGV4dC9jc3MnOgorCisJCQkJcmV0dXJuICR0aGlzLT5fbWluaWZ5X2pzX2Nzcygkb3V0cHV0LCAnY3NzJyk7CisKIAkJCWNhc2UgJ3RleHQvamF2YXNjcmlwdCc6CiAJCQljYXNlICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzoKIAkJCWNhc2UgJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCc6CiAKLQkJCQkkb3V0cHV0ID0gJHRoaXMtPl9taW5pZnlfc2NyaXB0X3N0eWxlKCRvdXRwdXQpOwotCi0JCQlicmVhazsKKwkJCQlyZXR1cm4gJHRoaXMtPl9taW5pZnlfanNfY3NzKCRvdXRwdXQsICdqcycpOwogCiAJCQlkZWZhdWx0OiBicmVhazsKIAkJfQpAQCAtODA5LDEzNCArODY3LDEwMCBAQAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkvKioKLQkgKiBNaW5pZnkgU3R5bGUgYW5kIFNjcmlwdAorCSAqIE1pbmlmeSBKYXZhU2NyaXB0IGFuZCBDU1MgY29kZQogCSAqCi0JICogUmVkdWNlIGV4Y2Vzc2l2ZSBzaXplIG9mIENTUy9KYXZhU2NyaXB0IGNvbnRlbnQuICBUbyByZW1vdmUgc3BhY2VzIHRoaXMKLQkgKiBzY3JpcHQgd2Fsa3MgdGhlIHN0cmluZyBhcyBhbiBhcnJheSBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgcG9pbnRlciBpcyBpbnNpZGUKLQkgKiBhIHN0cmluZyBjcmVhdGVkIGJ5IHNpbmdsZSBxdW90ZXMgb3IgZG91YmxlIHF1b3Rlcy4gIHNwYWNlcyBpbnNpZGUgdGhvc2UKLQkgKiBzdHJpbmdzIGFyZSBub3Qgc3RyaXBwZWQuICBPcGVuaW5nIGFuZCBjbG9zaW5nIHRhZ3MgYXJlIHNldmVyZWQgZnJvbQotCSAqIHRoZSBzdHJpbmcgaW5pdGlhbGx5IGFuZCBzYXZlZCB3aXRob3V0IHN0cmlwcGluZyB3aGl0ZXNwYWNlIHRvIHByZXNlcnZlCi0JICogdGhlIHRhZ3MgYW5kIGFueSBhc3NvY2lhdGVkIHByb3BlcnRpZXMgaWYgdGFncyBhcmUgcHJlc2VudAorCSAqIFN0cmlwcyBjb21tZW50cyBhbmQgZXhjZXNzaXZlIHdoaXRlc3BhY2UgY2hhcmFjdGVycwogCSAqCi0JICogTWluaWZpY2F0aW9uIGxvZ2ljL3dvcmtmbG93IGlzIHNpbWlsYXIgdG8gbWV0aG9kcyB1c2VkIGJ5IERvdWdsYXMgQ3JvY2tmb3JkCi0JICogaW4gSlNNSU4uIGh0dHA6Ly93d3cuY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L2pzbWluLmh0bWwKLQkgKgotCSAqIEtOT1dOIElTU1VFOiBlbmRpbmcgYSBsaW5lIHdpdGggYSBjbG9zaW5nIHBhcmVudGhlc2lzICcpJyBhbmQgbm8gc2VtaWNvbG9uCi0JICogd2hlcmUgdGhlcmUgc2hvdWxkIGJlIG9uZSB3aWxsIGJyZWFrIHRoZSBKYXZhc2NyaXB0LiBOZXcgbGluZXMgYWZ0ZXIgYQotCSAqIGNsb3NpbmcgcGFyZW50aGVzaXMgYXJlIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBzY3JpcHQuIEZvciBiZXN0IHJlc3VsdHMKLQkgKiBiZSBzdXJlIHRvIHRlcm1pbmF0ZSBsaW5lcyB3aXRoIGEgc2VtaWNvbG9uIHdoZW4gYXBwcm9wcmlhdGUuCi0JICoKLQkgKiBAcGFyYW0Jc3RyaW5nCSRvdXRwdXQJCU91dHB1dCB0byBtaW5pZnkKLQkgKiBAcGFyYW0JYm9vbAkkaGFzX3RhZ3MJU3BlY2lmeSBpZiB0aGUgb3V0cHV0IGhhcyBzdHlsZSBvciBzY3JpcHQgdGFncwotCSAqIEByZXR1cm4Jc3RyaW5nCU1pbmlmaWVkIG91dHB1dAorCSAqIEBwYXJhbQlzdHJpbmcJJG91dHB1dAorCSAqIEBwYXJhbQlzdHJpbmcJJHR5cGUJJ2pzJyBvciAnY3NzJworCSAqIEBwYXJhbQlib29sCSR0YWdzCVdoZXRoZXIgJG91dHB1dCBjb250YWlucyB0aGUgJ3NjcmlwdCcgb3IgJ3N0eWxlJyB0YWcKKwkgKiBAcmV0dXJuCXN0cmluZwogCSAqLwotCXByb3RlY3RlZCBmdW5jdGlvbiBfbWluaWZ5X3NjcmlwdF9zdHlsZSgkb3V0cHV0LCAkaGFzX3RhZ3MgPSBGQUxTRSkKKwlwcm90ZWN0ZWQgZnVuY3Rpb24gX21pbmlmeV9qc19jc3MoJG91dHB1dCwgJHR5cGUsICR0YWdzID0gRkFMU0UpCiAJewotCQkvLyBXZSBvbmx5IG5lZWQgdGhpcyBpZiB0aGVyZSBhcmUgdGFncyBpbiB0aGUgZmlsZQotCQlpZiAoJGhhc190YWdzID09PSBUUlVFKQorCQlpZiAoJHRhZ3MgPT09IFRSVUUpCiAJCXsKLQkJCS8vIFJlbW92ZSBvcGVuaW5nIHRhZyBhbmQgc2F2ZSBmb3IgbGF0ZXIKLQkJCSRwb3MgPSBzdHJwb3MoJG91dHB1dCwgJz4nKSArIDE7Ci0JCQkkb3Blbl90YWcgPSBzdWJzdHIoJG91dHB1dCwgMCwgJHBvcyk7Ci0JCQkkb3V0cHV0ID0gc3Vic3RyX3JlcGxhY2UoJG91dHB1dCwgJycsIDAsICRwb3MpOworCQkJJHRhZ3MgPSBhcnJheSgnY2xvc2UnID0+IHN0cnJjaHIoJG91dHB1dCwgJzwnKSk7CiAKLQkJCS8vIFJlbW92ZSBjbG9zaW5nIHRhZyBhbmQgc2F2ZSBpdCBmb3IgbGF0ZXIKLQkJCSRwb3MgPSBzdHJwb3MoJG91dHB1dCwgJzwvJyk7Ci0JCQkkY2xvc2luZ190YWcgPSBzdWJzdHIoJG91dHB1dCwgJHBvcywgc3RybGVuKCRvdXRwdXQpKTsKLQkJCSRvdXRwdXQgPSBzdWJzdHJfcmVwbGFjZSgkb3V0cHV0LCAnJywgJHBvcyk7CisJCQkkb3Blbl9sZW5ndGggPSBzdHJwb3MoJG91dHB1dCwgJz4nKSArIDE7CisJCQkkdGFnc1snb3BlbiddID0gc3Vic3RyKCRvdXRwdXQsIDAsICRvcGVuX2xlbmd0aCk7CisKKwkJCSRvdXRwdXQgPSBzdWJzdHIoJG91dHB1dCwgJG9wZW5fbGVuZ3RoLCAtc3RybGVuKCR0YWdzWydjbG9zZSddKSk7CisKKwkJCS8vIFN0cmlwIHNwYWNlcyBmcm9tIHRoZSB0YWdzCisJCQkkdGFncyA9IHByZWdfcmVwbGFjZSgnI1xzezIsfSMnLCAnICcsICR0YWdzKTsKIAkJfQogCi0JCS8vIFJlbW92ZSBDU1MgY29tbWVudHMKLQkJJG91dHB1dCA9IHByZWdfcmVwbGFjZSgnIS9cKlteKl0qXCorKFteL11bXipdKlwqKykqLyFpJywgJycsICRvdXRwdXQpOworCQkkb3V0cHV0ID0gdHJpbSgkb3V0cHV0KTsKIAotCQkvLyBSZW1vdmUgc3BhY2VzIGFyb3VuZCBjdXJseSBicmFja2V0cywgY29sb25zLAotCQkvLyBzZW1pLWNvbG9ucywgcGFyZW50aGVzaXMsIGNvbW1hcwotCQkkY2h1bmtzID0gcHJlZ19zcGxpdCgnLyhbXCd8Il0pLisoPyFbXlxcXF1cXDEpXFwxL2lVJywgJG91dHB1dCwgLTEsIFBSRUdfU1BMSVRfT0ZGU0VUX0NBUFRVUkUpOwotCQlmb3IgKCRpID0gY291bnQoJGNodW5rcykgLSAxOyAkaSA+PSAwOyAkaS0tKQorCQlpZiAoJHR5cGUgPT09ICdqcycpCiAJCXsKLQkJCSRvdXRwdXQgPSBzdWJzdHJfcmVwbGFjZSgKLQkJCQkkb3V0cHV0LAotCQkJCXByZWdfcmVwbGFjZSgnL1xzKig6fDt8LHx9fHt8XCh8XCkpXHMqL2knLCAnJDEnLCAkY2h1bmtzWyRpXVswXSksCi0JCQkJJGNodW5rc1skaV1bMV0sCi0JCQkJc3RybGVuKCRjaHVua3NbJGldWzBdKQorCQkJLy8gQ2F0Y2ggYWxsIHN0cmluZyBsaXRlcmFscyBhbmQgY29tbWVudCBibG9ja3MKKwkJCWlmIChwcmVnX21hdGNoX2FsbCgnIygoPzooKD88IVxcXClcJ3wiKXwoL1wqKXwoLy8pKS4qKD8oMikoPzwhXFxcKVwyfCg/KDMpXCovfFxuKSkpI21zdVVTJywgJG91dHB1dCwgJG1hdGNoLCBQUkVHX09GRlNFVF9DQVBUVVJFKSkKKwkJCXsKKwkJCQkkanNfbGl0ZXJhbHMgPSAkanNfY29kZSA9IGFycmF5KCk7CisJCQkJZm9yICgkbWF0Y2ggPSAkbWF0Y2hbMF0sICRjID0gY291bnQoJG1hdGNoKSwgJGkgPSAkcG9zID0gJG9mZnNldCA9IDA7ICRpIDwgJGM7ICRpKyspCisJCQkJeworCQkJCQkkanNfY29kZVskcG9zKytdID0gdHJpbShzdWJzdHIoJG91dHB1dCwgJG9mZnNldCwgJG1hdGNoWyRpXVsxXSAtICRvZmZzZXQpKTsKKwkJCQkJJG9mZnNldCA9ICRtYXRjaFskaV1bMV0gKyBzdHJsZW4oJG1hdGNoWyRpXVswXSk7CisKKwkJCQkJLy8gU2F2ZSBvbmx5IGlmIHdlIGhhdmVuJ3QgbWF0Y2hlZCBhIGNvbW1lbnQgYmxvY2sKKwkJCQkJaWYgKCRtYXRjaFskaV1bMF1bMF0gIT09ICcvJykKKwkJCQkJeworCQkJCQkJJGpzX2xpdGVyYWxzWyRwb3MrK10gPSBhcnJheV9zaGlmdCgkbWF0Y2hbJGldKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkkanNfY29kZVskcG9zXSA9IHN1YnN0cigkb3V0cHV0LCAkb2Zmc2V0KTsKKworCQkJCS8vICRtYXRjaCBtaWdodCBiZSBxdWl0ZSBsYXJnZSwgc28gZnJlZSBpdCB1cCB0b2dldGhlciB3aXRoIG90aGVyIHZhcnMgdGhhdCB3ZSBubyBsb25nZXIgbmVlZAorCQkJCXVuc2V0KCRtYXRjaCwgJG9mZnNldCwgJHBvcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJJGpzX2NvZGUgPSBhcnJheSgkb3V0cHV0KTsKKwkJCQkkanNfbGl0ZXJhbHMgPSBhcnJheSgpOworCQkJfQorCisJCQkkdmFybmFtZSA9ICdqc19jb2RlJzsKKwkJfQorCQllbHNlCisJCXsKKwkJCSR2YXJuYW1lID0gJ291dHB1dCc7CisJCX0KKworCQkvLyBTdGFuZGFydGl6ZSBuZXcgbGluZXMKKwkJJCR2YXJuYW1lID0gc3RyX3JlcGxhY2UoYXJyYXkoIlxyXG4iLCAiXHIiKSwgIlxuIiwgJCR2YXJuYW1lKTsKKworCQlpZiAoJHR5cGUgPT09ICdqcycpCisJCXsKKwkJCSRwYXR0ZXJucyA9IGFycmF5KAorCQkJCScjXHMqKFshXCMlJigpKissXC0uLzo7PD0+P0BcW1xdXmB7fH1+XSlccyojJwk9PiAnJDEnLAkvLyBSZW1vdmUgc3BhY2VzIGZvbGxvd2luZyBhbmQgcHJlY2VlZGluZyBKUy13aXNlIG5vbi1zcGVjaWFsICYgbm9uLXdvcmQgY2hhcmFjdGVycworCQkJCScjXHN7Mix9IycJCQkJCT0+ICcgJwkJLy8gUmVkdWNlIHRoZSByZW1haW5pbmcgbXVsdGlwbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIGEgc2luZ2xlIHNwYWNlCisJCQkpOworCQl9CisJCWVsc2UKKwkJeworCQkJJHBhdHRlcm5zID0gYXJyYXkoCisJCQkJJyMvXCouKig/PVwqLylcKi8jcycJPT4gJycsCQkvLyBSZW1vdmUgLyogYmxvY2sgY29tbWVudHMgKi8KKwkJCQknI1xuPy8vW15cbl0qIycJCT0+ICcnLAkJLy8gUmVtb3ZlIC8vIGxpbmUgY29tbWVudHMKKwkJCQknI1xzKihbXlx3LlwjJV0pXHMqI1UnCT0+ICckMScsCS8vIFJlbW92ZSBzcGFjZXMgZm9sbG93aW5nIGFuZCBwcmVjZWVkaW5nIG5vbi13b3JkIGNoYXJhY3RlcnMsIGV4Y2x1ZGluZyBkb3RzLCBoYXNoZXMgYW5kIHRoZSBwZXJjZW50IHNpZ24KKwkJCQknI1xzezIsfSMnCQk9PiAnICcJCS8vIFJlZHVjZSB0aGUgcmVtYWluaW5nIG11bHRpcGxlIHNwYWNlIGNoYXJhY3RlcnMgdG8gYSBzaW5nbGUgc3BhY2UKIAkJCSk7CiAJCX0KIAotCQkvLyBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMKLQkJLy8gUmVwbGFjZSBjYXJyaWFnZSByZXR1cm5zICYgbXVsdGlwbGUgbmV3IGxpbmVzIHdpdGggc2luZ2xlIG5ldyBsaW5lCi0JCS8vIGFuZCB0cmltIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UKLQkJJG91dHB1dCA9IHRyaW0ocHJlZ19yZXBsYWNlKGFycmF5KCcvXHQrLycsICcvXHIvJywgJy9cbisvJyksIGFycmF5KCcgJywgIlxuIiwgIlxuIiksICRvdXRwdXQpKTsKKwkJJCR2YXJuYW1lID0gcHJlZ19yZXBsYWNlKGFycmF5X2tleXMoJHBhdHRlcm5zKSwgYXJyYXlfdmFsdWVzKCRwYXR0ZXJucyksICQkdmFybmFtZSk7CiAKLQkJLy8gUmVtb3ZlIHNwYWNlcyB3aGVuIHNhZmUgdG8gZG8gc28uCi0JCSRpbl9zdHJpbmcgPSAkaW5fZHN0cmluZyA9ICRwcmV2ID0gRkFMU0U7Ci0JCSRhcnJheV9vdXRwdXQgPSBzdHJfc3BsaXQoJG91dHB1dCk7Ci0JCWZvcmVhY2ggKCRhcnJheV9vdXRwdXQgYXMgJGtleSA9PiAkdmFsdWUpCisJCS8vIEdsdWUgYmFjayBKUyBxdW90ZWQgc3RyaW5ncworCQlpZiAoJHR5cGUgPT09ICdqcycpCiAJCXsKLQkJCWlmICgkaW5fc3RyaW5nID09PSBGQUxTRSAmJiAkaW5fZHN0cmluZyA9PT0gRkFMU0UpCi0JCQl7Ci0JCQkJaWYgKCR2YWx1ZSA9PT0gJyAnKQotCQkJCXsKLQkJCQkJLy8gR2V0IHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIGFycmF5IGZvciBjb21wYXJpc29ucwotCQkJCQkkbmV4dCA9ICRhcnJheV9vdXRwdXRbJGtleSArIDFdOwotCi0JCQkJCS8vIFN0cmlwIHNwYWNlcyBwcmVjZWRlZC9mb2xsb3dlZCBieSBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIKLQkJCQkJLy8gb3Igbm90IHByZWNlZGVkL2ZvbGxvd2VkIGJ5IGFuIGFscGhhbnVtZXJpYwotCQkJCQkvLyBvciBub3QgcHJlY2VkZWQvZm9sbG93ZWQgXCAkIGFuZCBfCi0JCQkJCWlmICgocHJlZ19tYXRjaCgnL15bXHgyMC1ceDdmXSokL0QnLCAkbmV4dCkgT1IgcHJlZ19tYXRjaCgnL15bXHgyMC1ceDdmXSokL0QnLCAkcHJldikpCi0JCQkJCQkmJiAoICEgY3R5cGVfYWxudW0oJG5leHQpIE9SICEgY3R5cGVfYWxudW0oJHByZXYpKQotCQkJCQkJJiYgISBpbl9hcnJheSgkbmV4dCwgYXJyYXkoJ1xcJywgJ18nLCAnJCcpLCBUUlVFKQotCQkJCQkJJiYgISBpbl9hcnJheSgkcHJldiwgYXJyYXkoJ1xcJywgJ18nLCAnJCcpLCBUUlVFKQotCQkJCQkpCi0JCQkJCXsKLQkJCQkJCXVuc2V0KCRhcnJheV9vdXRwdXRbJGtleV0pOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCS8vIFNhdmUgdGhpcyB2YWx1ZSBhcyBwcmV2aW91cyBmb3IgdGhlIG5leHQgaXRlcmF0aW9uCi0JCQkJCS8vIGlmIGl0IGlzIG5vdCBhIGJsYW5rIHNwYWNlCi0JCQkJCSRwcmV2ID0gJHZhbHVlOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKCR2YWx1ZSA9PT0gIiciKQotCQkJewotCQkJCSRpbl9zdHJpbmcgPSAhICRpbl9zdHJpbmc7Ci0JCQl9Ci0JCQllbHNlaWYgKCR2YWx1ZSA9PT0gJyInKQotCQkJewotCQkJCSRpbl9kc3RyaW5nID0gISAkaW5fZHN0cmluZzsKLQkJCX0KKwkJCSRqc19jb2RlICs9ICRqc19saXRlcmFsczsKKwkJCWtzb3J0KCRqc19jb2RlKTsKKwkJCSRvdXRwdXQgPSBpbXBsb2RlKCRqc19jb2RlKTsKKwkJCXVuc2V0KCRqc19jb2RlLCAkanNfbGl0ZXJhbHMsICR2YXJuYW1lLCAkcGF0dGVybnMpOwogCQl9CiAKLQkJLy8gUHV0IHRoZSBzdHJpbmcgYmFjayB0b2dldGhlciBhZnRlciBzcGFjZXMgaGF2ZSBiZWVuIHN0cmlwcGVkCi0JCSRvdXRwdXQgPSBpbXBsb2RlKCRhcnJheV9vdXRwdXQpOwotCi0JCS8vIFJlbW92ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIHVubGVzcyBwcmV2aW91cyBvciBuZXh0IGNoYXJhY3RlciBpcwotCQkvLyBwcmludGFibGUgb3IgTm9uLUFTQ0lJCi0JCXByZWdfbWF0Y2hfYWxsKCcvW1xuXS8nLCAkb3V0cHV0LCAkbGYsIFBSRUdfT0ZGU0VUX0NBUFRVUkUpOwotCQkkcmVtb3ZlZF9sZiA9IDA7Ci0JCWZvcmVhY2ggKCRsZiBhcyAkZmVlZF9wb3NpdGlvbikKLQkJewotCQkJZm9yZWFjaCAoJGZlZWRfcG9zaXRpb24gYXMgJHBvc2l0aW9uKQotCQkJewotCQkJCSRwb3NpdGlvbiA9ICRwb3NpdGlvblsxXSAtICRyZW1vdmVkX2xmOwotCQkJCSRuZXh0ID0gJG91dHB1dFskcG9zaXRpb24gKyAxXTsKLQkJCQkkcHJldiA9ICRvdXRwdXRbJHBvc2l0aW9uIC0gMV07Ci0JCQkJaWYgKCAhIGN0eXBlX3ByaW50KCRuZXh0KSAmJiAhIGN0eXBlX3ByaW50KCRwcmV2KQotCQkJCQkmJiAhIHByZWdfbWF0Y2goJy9eW1x4MjAtXHg3Zl0qJC9EJywgJG5leHQpCi0JCQkJCSYmICEgcHJlZ19tYXRjaCgnL15bXHgyMC1ceDdmXSokL0QnLCAkcHJldikKLQkJCQkpCi0JCQkJewotCQkJCQkkb3V0cHV0ID0gc3Vic3RyX3JlcGxhY2UoJG91dHB1dCwgJycsICRwb3NpdGlvbiwgMSk7Ci0JCQkJCSRyZW1vdmVkX2xmKys7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gUHV0IHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZ3MgYmFjayBpZiBhcHBsaWNhYmxlCi0JCXJldHVybiBpc3NldCgkb3Blbl90YWcpCi0JCQk/ICRvcGVuX3RhZy4kb3V0cHV0LiRjbG9zaW5nX3RhZworCQlyZXR1cm4gaXNfYXJyYXkoJHRhZ3MpCisJCQk/ICR0YWdzWydvcGVuJ10uJG91dHB1dC4kdGFnc1snY2xvc2UnXQogCQkJOiAkb3V0cHV0OwogCX0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvUm91dGVyLnBocCBiL3N5c3RlbS9jb3JlL1JvdXRlci5waHAKaW5kZXggY2MzOTE2Zi4uNjMzNTI0MCAxMDA2NDQKLS0tIGEvc3lzdGVtL2NvcmUvUm91dGVyLnBocAorKysgYi9zeXN0ZW0vY29yZS9Sb3V0ZXIucGhwCkBAIC05MSw2ICs5MSwxNSBAQAogCSAqLwogCXB1YmxpYyAkdHJhbnNsYXRlX3VyaV9kYXNoZXMgPSBGQUxTRTsKIAorCS8qKgorCSAqIEVuYWJsZSBxdWVyeSBzdHJpbmdzIGZsYWcKKwkgKgorCSAqIERldGVybWluZXMgd2V0aGVyIHRvIHVzZSBHRVQgcGFyYW1ldGVycyBvciBzZWdtZW50IFVSSXMKKwkgKgorCSAqIEB2YXIJYm9vbAorCSAqLworCXB1YmxpYyAkZW5hYmxlX3F1ZXJ5X3N0cmluZ3MgPSBGQUxTRTsKKwogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkvKioKQEAgLTEwMiw5ICsxMTEsMzQgQEAKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogCXsKKwkJZ2xvYmFsICRyb3V0aW5nOworCiAJCSR0aGlzLT5jb25maWcgPSYgbG9hZF9jbGFzcygnQ29uZmlnJywgJ2NvcmUnKTsKIAkJJHRoaXMtPnVyaSA9JiBsb2FkX2NsYXNzKCdVUkknLCAnY29yZScpOworCisJCSR0aGlzLT5lbmFibGVfcXVlcnlfc3RyaW5ncyA9ICggISBpc19jbGkoKSAmJiAkdGhpcy0+Y29uZmlnLT5pdGVtKCdlbmFibGVfcXVlcnlfc3RyaW5ncycpID09PSBUUlVFKTsKIAkJJHRoaXMtPl9zZXRfcm91dGluZygpOworCisJCS8vIFNldCBhbnkgcm91dGluZyBvdmVycmlkZXMgdGhhdCBtYXkgZXhpc3QgaW4gdGhlIG1haW4gaW5kZXggZmlsZQorCQlpZiAoaXNzZXQoJHJvdXRpbmcpICYmIGlzX2FycmF5KCRyb3V0aW5nKSkKKwkJeworCQkJaWYgKGlzc2V0KCRyb3V0aW5nWydkaXJlY3RvcnknXSkpCisJCQl7CisJCQkJJHRoaXMtPnNldF9kaXJlY3RvcnkoJHJvdXRpbmdbJ2RpcmVjdG9yeSddKTsKKwkJCX0KKworCQkJaWYgKCAhIGVtcHR5KCRyb3V0aW5nWydjb250cm9sbGVyJ10pKQorCQkJeworCQkJCSR0aGlzLT5zZXRfY2xhc3MoJHJvdXRpbmdbJ2NvbnRyb2xsZXInXSk7CisJCQl9CisKKwkJCWlmIChpc3NldCgkcm91dGluZ1snZnVuY3Rpb24nXSkpCisJCQl7CisJCQkJJHJvdXRpbmdbJ2Z1bmN0aW9uJ10gPSBlbXB0eSgkcm91dGluZ1snZnVuY3Rpb24nXSkgPyAnaW5kZXgnIDogJHJvdXRpbmdbJ2Z1bmN0aW9uJ107CisJCQkJJHRoaXMtPnNldF9tZXRob2QoJHJvdXRpbmdbJ2Z1bmN0aW9uJ10pOworCQkJfQorCQl9CisKIAkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ1JvdXRlciBDbGFzcyBJbml0aWFsaXplZCcpOwogCX0KIApAQCAtMTIzLDI2ICsxNTcsMzkgQEAKIAkJLy8gQXJlIHF1ZXJ5IHN0cmluZ3MgZW5hYmxlZCBpbiB0aGUgY29uZmlnIGZpbGU/IE5vcm1hbGx5IENJIGRvZXNuJ3QgdXRpbGl6ZSBxdWVyeSBzdHJpbmdzCiAJCS8vIHNpbmNlIFVSSSBzZWdtZW50cyBhcmUgbW9yZSBzZWFyY2gtZW5naW5lIGZyaWVuZGx5LCBidXQgdGhleSBjYW4gb3B0aW9uYWxseSBiZSB1c2VkLgogCQkvLyBJZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgd2Ugd2lsbCBnYXRoZXIgdGhlIGRpcmVjdG9yeS9jbGFzcy9tZXRob2QgYSBsaXR0bGUgZGlmZmVyZW50bHkKLQkJJHNlZ21lbnRzID0gYXJyYXkoKTsKLQkJaWYgKCR0aGlzLT5jb25maWctPml0ZW0oJ2VuYWJsZV9xdWVyeV9zdHJpbmdzJykgPT09IFRSVUUKLQkJCSYmICEgZW1wdHkoJF9HRVRbJHRoaXMtPmNvbmZpZy0+aXRlbSgnY29udHJvbGxlcl90cmlnZ2VyJyldKQotCQkJJiYgaXNfc3RyaW5nKCRfR0VUWyR0aGlzLT5jb25maWctPml0ZW0oJ2NvbnRyb2xsZXJfdHJpZ2dlcicpXSkKLQkJKQorCQlpZiAoJHRoaXMtPmVuYWJsZV9xdWVyeV9zdHJpbmdzKQogCQl7Ci0JCQlpZiAoaXNzZXQoJF9HRVRbJHRoaXMtPmNvbmZpZy0+aXRlbSgnZGlyZWN0b3J5X3RyaWdnZXInKV0pICYmIGlzX3N0cmluZygkX0dFVFskdGhpcy0+Y29uZmlnLT5pdGVtKCdkaXJlY3RvcnlfdHJpZ2dlcicpXSkpCisJCQkkX2QgPSAkdGhpcy0+Y29uZmlnLT5pdGVtKCdkaXJlY3RvcnlfdHJpZ2dlcicpOworCQkJJF9kID0gaXNzZXQoJF9HRVRbJF9kXSkgPyB0cmltKCRfR0VUWyRfZF0sICIgXHRcblxyXDBceDBCLyIpIDogJyc7CisJCQlpZiAoJF9kICE9PSAnJykKIAkJCXsKLQkJCQkkdGhpcy0+c2V0X2RpcmVjdG9yeSh0cmltKCR0aGlzLT51cmktPl9maWx0ZXJfdXJpKCRfR0VUWyR0aGlzLT5jb25maWctPml0ZW0oJ2RpcmVjdG9yeV90cmlnZ2VyJyldKSkpOwotCQkJCSRzZWdtZW50c1tdID0gJHRoaXMtPmRpcmVjdG9yeTsKKwkJCQkkdGhpcy0+c2V0X2RpcmVjdG9yeSgkdGhpcy0+dXJpLT5maWx0ZXJfdXJpKCRfZCkpOwogCQkJfQogCi0JCQkkdGhpcy0+c2V0X2NsYXNzKHRyaW0oJHRoaXMtPnVyaS0+X2ZpbHRlcl91cmkoJF9HRVRbJHRoaXMtPmNvbmZpZy0+aXRlbSgnY29udHJvbGxlcl90cmlnZ2VyJyldKSkpOwotCQkJJHNlZ21lbnRzW10gPSAkdGhpcy0+Y2xhc3M7Ci0KLQkJCWlmICggISBlbXB0eSgkX0dFVFskdGhpcy0+Y29uZmlnLT5pdGVtKCdmdW5jdGlvbl90cmlnZ2VyJyldKSAmJiBpc19zdHJpbmcoJF9HRVRbJHRoaXMtPmNvbmZpZy0+aXRlbSgnZnVuY3Rpb25fdHJpZ2dlcicpXSkpCisJCQkkX2MgPSAkdGhpcy0+Y29uZmlnLT5pdGVtKCdjb250cm9sbGVyX3RyaWdnZXInKTsKKwkJCWlmICggISBlbXB0eSgkX0dFVFskX2NdKSkKIAkJCXsKLQkJCQkkdGhpcy0+c2V0X21ldGhvZCh0cmltKCR0aGlzLT51cmktPl9maWx0ZXJfdXJpKCRfR0VUWyR0aGlzLT5jb25maWctPml0ZW0oJ2Z1bmN0aW9uX3RyaWdnZXInKV0pKSk7Ci0JCQkJJHNlZ21lbnRzW10gPSAkdGhpcy0+bWV0aG9kOworCQkJCSR0aGlzLT5zZXRfY2xhc3ModHJpbSgkdGhpcy0+dXJpLT5maWx0ZXJfdXJpKHRyaW0oJF9HRVRbJF9jXSkpKSk7CisKKwkJCQkkX2YgPSAkdGhpcy0+Y29uZmlnLT5pdGVtKCdmdW5jdGlvbl90cmlnZ2VyJyk7CisJCQkJaWYgKCAhIGVtcHR5KCRfR0VUWyRfZl0pKQorCQkJCXsKKwkJCQkJJHRoaXMtPnNldF9tZXRob2QodHJpbSgkdGhpcy0+dXJpLT5maWx0ZXJfdXJpKCRfR0VUWyRfZl0pKSk7CisJCQkJfQorCisJCQkJJHRoaXMtPnVyaS0+cnNlZ21lbnRzID0gYXJyYXkoCisJCQkJCTEgPT4gJHRoaXMtPmNsYXNzLAorCQkJCQkyID0+ICR0aGlzLT5tZXRob2QKKwkJCQkpOwogCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSR0aGlzLT5fc2V0X2RlZmF1bHRfY29udHJvbGxlcigpOworCQkJfQorCisJCQkvLyBSb3V0aW5nIHJ1bGVzIGRvbid0IGFwcGx5IHRvIHF1ZXJ5IHN0cmluZ3MgYW5kIHdlIGRvbid0IG5lZWQgdG8gZGV0ZWN0CisJCQkvLyBkaXJlY3Rvcmllcywgc28gd2UncmUgZG9uZSBoZXJlCisJCQlyZXR1cm47CiAJCX0KIAogCQkvLyBMb2FkIHRoZSByb3V0ZXMucGhwIGZpbGUuCkBAIC0xNjUsMjUgKzIxMiw1OCBAQAogCQkJJHRoaXMtPnJvdXRlcyA9ICRyb3V0ZTsKIAkJfQogCi0JCS8vIFdlcmUgdGhlcmUgYW55IHF1ZXJ5IHN0cmluZyBzZWdtZW50cz8gSWYgc28sIHdlJ2xsIHZhbGlkYXRlIHRoZW0gYW5kIGJhaWwgb3V0IHNpbmNlIHdlJ3JlIGRvbmUuCi0JCWlmIChjb3VudCgkc2VnbWVudHMpID4gMCkKKwkJLy8gSXMgdGhlcmUgYW55dGhpbmcgdG8gcGFyc2U/CisJCWlmICgkdGhpcy0+dXJpLT51cmlfc3RyaW5nICE9PSAnJykKIAkJewotCQkJcmV0dXJuICR0aGlzLT5fdmFsaWRhdGVfcmVxdWVzdCgkc2VnbWVudHMpOworCQkJJHRoaXMtPl9wYXJzZV9yb3V0ZXMoKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSR0aGlzLT5fc2V0X2RlZmF1bHRfY29udHJvbGxlcigpOworCQl9CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgorCSAqIFNldCByZXF1ZXN0IHJvdXRlCisJICoKKwkgKiBUYWtlcyBhbiBhcnJheSBvZiBVUkkgc2VnbWVudHMgYXMgaW5wdXQgYW5kIHNldHMgdGhlIGNsYXNzL21ldGhvZAorCSAqIHRvIGJlIGNhbGxlZC4KKwkgKgorCSAqIEB1c2VkLWJ5CUNJX1JvdXRlcjo6X3BhcnNlX3JvdXRlcygpCisJICogQHBhcmFtCWFycmF5CSRzZWdtZW50cwlVUkkgc2VnbWVudHMKKwkgKiBAcmV0dXJuCXZvaWQKKwkgKi8KKwlwcm90ZWN0ZWQgZnVuY3Rpb24gX3NldF9yZXF1ZXN0KCRzZWdtZW50cyA9IGFycmF5KCkpCisJeworCQkkc2VnbWVudHMgPSAkdGhpcy0+X3ZhbGlkYXRlX3JlcXVlc3QoJHNlZ21lbnRzKTsKKwkJLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgc2VnbWVudHMgbGVmdCAtIHRyeSB0aGUgZGVmYXVsdCBjb250cm9sbGVyOworCQkvLyBXQVJOSU5HOiBEaXJlY3RvcmllcyBnZXQgc2hpZnRlZCBvdXQgb2YgdGhlIHNlZ21lbnRzIGFycmF5IQorCQlpZiAoZW1wdHkoJHNlZ21lbnRzKSkKKwkJeworCQkJJHRoaXMtPl9zZXRfZGVmYXVsdF9jb250cm9sbGVyKCk7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvLyBGZXRjaCB0aGUgY29tcGxldGUgVVJJIHN0cmluZwotCQkkdGhpcy0+dXJpLT5fZmV0Y2hfdXJpX3N0cmluZygpOwotCi0JCS8vIElzIHRoZXJlIGEgVVJJIHN0cmluZz8gSWYgbm90LCB0aGUgZGVmYXVsdCBjb250cm9sbGVyIHNwZWNpZmllZCBpbiB0aGUgInJvdXRlcyIgZmlsZSB3aWxsIGJlIHNob3duLgotCQlpZiAoJHRoaXMtPnVyaS0+dXJpX3N0cmluZyA9PSAnJykKKwkJaWYgKCR0aGlzLT50cmFuc2xhdGVfdXJpX2Rhc2hlcyA9PT0gVFJVRSkKIAkJewotCQkJcmV0dXJuICR0aGlzLT5fc2V0X2RlZmF1bHRfY29udHJvbGxlcigpOworCQkJJHNlZ21lbnRzWzBdID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRzZWdtZW50c1swXSk7CisJCQlpZiAoaXNzZXQoJHNlZ21lbnRzWzFdKSkKKwkJCXsKKwkJCQkkc2VnbWVudHNbMV0gPSBzdHJfcmVwbGFjZSgnLScsICdfJywgJHNlZ21lbnRzWzFdKTsKKwkJCX0KIAkJfQogCi0JCSR0aGlzLT51cmktPl9yZW1vdmVfdXJsX3N1ZmZpeCgpOyAvLyBSZW1vdmUgdGhlIFVSTCBzdWZmaXgKLQkJJHRoaXMtPnVyaS0+X2V4cGxvZGVfc2VnbWVudHMoKTsgLy8gQ29tcGlsZSB0aGUgc2VnbWVudHMgaW50byBhbiBhcnJheQotCQkkdGhpcy0+X3BhcnNlX3JvdXRlcygpOyAvLyBQYXJzZSBhbnkgY3VzdG9tIHJvdXRpbmcgdGhhdCBtYXkgZXhpc3QKLQkJJHRoaXMtPnVyaS0+X3JlaW5kZXhfc2VnbWVudHMoKTsgLy8gUmUtaW5kZXggdGhlIHNlZ21lbnQgYXJyYXkgc28gdGhhdCBpdCBzdGFydHMgd2l0aCAxIHJhdGhlciB0aGFuIDAKKwkJJHRoaXMtPnNldF9jbGFzcygkc2VnbWVudHNbMF0pOworCQlpZiAoaXNzZXQoJHNlZ21lbnRzWzFdKSkKKwkJeworCQkJJHRoaXMtPnNldF9tZXRob2QoJHNlZ21lbnRzWzFdKTsKKwkJfQorCisJCWFycmF5X3Vuc2hpZnQoJHNlZ21lbnRzLCBOVUxMKTsKKwkJdW5zZXQoJHNlZ21lbnRzWzBdKTsKKwkJJHRoaXMtPnVyaS0+cnNlZ21lbnRzID0gJHNlZ21lbnRzOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDYsMTAgKzI4NiwyMCBAQAogCQkJJG1ldGhvZCA9ICdpbmRleCc7CiAJCX0KIAotCQkkdGhpcy0+X3NldF9yZXF1ZXN0KGFycmF5KCRjbGFzcywgJG1ldGhvZCkpOworCQlpZiAoICEgZmlsZV9leGlzdHMoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kdGhpcy0+ZGlyZWN0b3J5LnVjZmlyc3QoJGNsYXNzKS4nLnBocCcpKQorCQl7CisJCQkvLyBUaGlzIHdpbGwgdHJpZ2dlciA0MDQgbGF0ZXIKKwkJCXJldHVybjsKKwkJfQogCi0JCS8vIHJlLWluZGV4IHRoZSByb3V0ZWQgc2VnbWVudHMgYXJyYXkgc28gaXQgc3RhcnRzIHdpdGggMSByYXRoZXIgdGhhbiAwCi0JCSR0aGlzLT51cmktPl9yZWluZGV4X3NlZ21lbnRzKCk7CisJCSR0aGlzLT5zZXRfY2xhc3MoJGNsYXNzKTsKKwkJJHRoaXMtPnNldF9tZXRob2QoJG1ldGhvZCk7CisKKwkJLy8gQXNzaWduIHJvdXRlZCBzZWdtZW50cywgaW5kZXggc3RhcnRpbmcgZnJvbSAxCisJCSR0aGlzLT51cmktPnJzZWdtZW50cyA9IGFycmF5KAorCQkJMSA9PiAkY2xhc3MsCisJCQkyID0+ICRtZXRob2QKKwkJKTsKIAogCQlsb2dfbWVzc2FnZSgnZGVidWcnLCAnTm8gVVJJIHByZXNlbnQuIERlZmF1bHQgY29udHJvbGxlciBzZXQuJyk7CiAJfQpAQCAtMjE3LDExOSArMzA3LDM1IEBACiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCS8qKgotCSAqIFNldCByZXF1ZXN0IHJvdXRlCi0JICoKLQkgKiBUYWtlcyBhbiBhcnJheSBvZiBVUkkgc2VnbWVudHMgYXMgaW5wdXQgYW5kIHNldHMgdGhlIGNsYXNzL21ldGhvZAotCSAqIHRvIGJlIGNhbGxlZC4KLQkgKgotCSAqIEBwYXJhbQlhcnJheQkkc2VnbWVudHMJVVJJIHNlZ21lbnRzCi0JICogQHJldHVybgl2b2lkCi0JICovCi0JcHJvdGVjdGVkIGZ1bmN0aW9uIF9zZXRfcmVxdWVzdCgkc2VnbWVudHMgPSBhcnJheSgpKQotCXsKLQkJJHNlZ21lbnRzID0gJHRoaXMtPl92YWxpZGF0ZV9yZXF1ZXN0KCRzZWdtZW50cyk7Ci0KLQkJaWYgKGNvdW50KCRzZWdtZW50cykgPT09IDApCi0JCXsKLQkJCXJldHVybiAkdGhpcy0+X3NldF9kZWZhdWx0X2NvbnRyb2xsZXIoKTsKLQkJfQotCi0JCWlmICgkdGhpcy0+dHJhbnNsYXRlX3VyaV9kYXNoZXMgPT09IFRSVUUpCi0JCXsKLQkJCSRzZWdtZW50c1swXSA9IHN0cl9yZXBsYWNlKCctJywgJ18nLCAkc2VnbWVudHNbMF0pOwotCQkJaWYgKGlzc2V0KCRzZWdtZW50c1sxXSkpCi0JCQl7Ci0JCQkJJHNlZ21lbnRzWzFdID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRzZWdtZW50c1sxXSk7Ci0JCQl9Ci0JCX0KLQotCQkkdGhpcy0+c2V0X2NsYXNzKCRzZWdtZW50c1swXSk7Ci0JCWlzc2V0KCRzZWdtZW50c1sxXSkgT1IgJHNlZ21lbnRzWzFdID0gJ2luZGV4JzsKLQkJJHRoaXMtPnNldF9tZXRob2QoJHNlZ21lbnRzWzFdKTsKLQotCQkvLyBVcGRhdGUgb3VyICJyb3V0ZWQiIHNlZ21lbnQgYXJyYXkgdG8gY29udGFpbiB0aGUgc2VnbWVudHMuCi0JCS8vIE5vdGU6IElmIHRoZXJlIGlzIG5vIGN1c3RvbSByb3V0aW5nLCB0aGlzIGFycmF5IHdpbGwgYmUKLQkJLy8gaWRlbnRpY2FsIHRvICR0aGlzLT51cmktPnNlZ21lbnRzCi0JCSR0aGlzLT51cmktPnJzZWdtZW50cyA9ICRzZWdtZW50czsKLQl9Ci0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JLyoqCiAJICogVmFsaWRhdGUgcmVxdWVzdAogCSAqCiAJICogQXR0ZW1wdHMgdmFsaWRhdGUgdGhlIFVSSSByZXF1ZXN0IGFuZCBkZXRlcm1pbmUgdGhlIGNvbnRyb2xsZXIgcGF0aC4KIAkgKgorCSAqIEB1c2VkLWJ5CUNJX1JvdXRlcjo6X3NldF9yZXF1ZXN0KCkKIAkgKiBAcGFyYW0JYXJyYXkJJHNlZ21lbnRzCVVSSSBzZWdtZW50cwotCSAqIEByZXR1cm4JYXJyYXkJVVJJIHNlZ21lbnRzCisJICogQHJldHVybgltaXhlZAlVUkkgc2VnbWVudHMKIAkgKi8KIAlwcm90ZWN0ZWQgZnVuY3Rpb24gX3ZhbGlkYXRlX3JlcXVlc3QoJHNlZ21lbnRzKQogCXsKLQkJaWYgKGNvdW50KCRzZWdtZW50cykgPT09IDApCisJCSRjID0gY291bnQoJHNlZ21lbnRzKTsKKwkJLy8gTG9vcCB0aHJvdWdoIG91ciBzZWdtZW50cyBhbmQgcmV0dXJuIGFzIHNvb24gYXMgYSBjb250cm9sbGVyCisJCS8vIGlzIGZvdW5kIG9yIHdoZW4gc3VjaCBhIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0CisJCXdoaWxlICgkYy0tID4gMCkKIAkJewotCQkJcmV0dXJuICRzZWdtZW50czsKLQkJfQorCQkJJHRlc3QgPSAkdGhpcy0+ZGlyZWN0b3J5CisJCQkJLnVjZmlyc3QoJHRoaXMtPnRyYW5zbGF0ZV91cmlfZGFzaGVzID09PSBUUlVFID8gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRzZWdtZW50c1swXSkgOiAkc2VnbWVudHNbMF0pOwogCi0JCSR0ZXN0ID0gKCR0aGlzLT50cmFuc2xhdGVfdXJpX2Rhc2hlcyA9PT0gVFJVRSkKLQkJCT8gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRzZWdtZW50c1swXSkgOiAkc2VnbWVudHNbMF07Ci0KLQkJLy8gRG9lcyB0aGUgcmVxdWVzdGVkIGNvbnRyb2xsZXIgZXhpc3QgaW4gdGhlIHJvb3QgZm9sZGVyPwotCQlpZiAoZmlsZV9leGlzdHMoQVBQUEFUSC4nY29udHJvbGxlcnMvJy4kdGVzdC4nLnBocCcpKQotCQl7Ci0JCQlyZXR1cm4gJHNlZ21lbnRzOwotCQl9Ci0KLQkJLy8gSXMgdGhlIGNvbnRyb2xsZXIgaW4gYSBzdWItZm9sZGVyPwotCQlpZiAoaXNfZGlyKEFQUFBBVEguJ2NvbnRyb2xsZXJzLycuJHNlZ21lbnRzWzBdKSkKLQkJewotCQkJLy8gU2V0IHRoZSBkaXJlY3RvcnkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBzZWdtZW50IGFycmF5Ci0JCQkkdGhpcy0+c2V0X2RpcmVjdG9yeShhcnJheV9zaGlmdCgkc2VnbWVudHMpKTsKLQkJCWlmIChjb3VudCgkc2VnbWVudHMpID4gMCkKKwkJCWlmICggISBmaWxlX2V4aXN0cyhBUFBQQVRILidjb250cm9sbGVycy8nLiR0ZXN0LicucGhwJykgJiYgaXNfZGlyKEFQUFBBVEguJ2NvbnRyb2xsZXJzLycuJHRoaXMtPmRpcmVjdG9yeS4kc2VnbWVudHNbMF0pKQogCQkJewotCQkJCSR0ZXN0ID0gKCR0aGlzLT50cmFuc2xhdGVfdXJpX2Rhc2hlcyA9PT0gVFJVRSkKLQkJCQkJPyBzdHJfcmVwbGFjZSgnLScsICdfJywgJHNlZ21lbnRzWzBdKSA6ICRzZWdtZW50c1swXTsKLQotCQkJCS8vIERvZXMgdGhlIHJlcXVlc3RlZCBjb250cm9sbGVyIGV4aXN0IGluIHRoZSBzdWItZGlyZWN0b3J5PwotCQkJCWlmICggISBmaWxlX2V4aXN0cyhBUFBQQVRILidjb250cm9sbGVycy8nLiR0aGlzLT5kaXJlY3RvcnkuJHRlc3QuJy5waHAnKSkKLQkJCQl7Ci0JCQkJCWlmICggISBlbXB0eSgkdGhpcy0+cm91dGVzWyc0MDRfb3ZlcnJpZGUnXSkpCi0JCQkJCXsKLQkJCQkJCSR0aGlzLT5kaXJlY3RvcnkgPSAnJzsKLQkJCQkJCXJldHVybiBleHBsb2RlKCcvJywgJHRoaXMtPnJvdXRlc1snNDA0X292ZXJyaWRlJ10sIDIpOwotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJc2hvd180MDQoJHRoaXMtPmRpcmVjdG9yeS4kc2VnbWVudHNbMF0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8vIElzIHRoZSBtZXRob2QgYmVpbmcgc3BlY2lmaWVkIGluIHRoZSByb3V0ZT8KLQkJCQkkc2VnbWVudHMgPSBleHBsb2RlKCcvJywgJHRoaXMtPmRlZmF1bHRfY29udHJvbGxlcik7Ci0JCQkJaWYgKCAhIGZpbGVfZXhpc3RzKEFQUFBBVEguJ2NvbnRyb2xsZXJzLycuJHRoaXMtPmRpcmVjdG9yeS4kc2VnbWVudHNbMF0uJy5waHAnKSkKLQkJCQl7Ci0JCQkJCSR0aGlzLT5kaXJlY3RvcnkgPSAnJzsKLQkJCQl9CisJCQkJJHRoaXMtPnNldF9kaXJlY3RvcnkoYXJyYXlfc2hpZnQoJHNlZ21lbnRzKSwgVFJVRSk7CisJCQkJY29udGludWU7CiAJCQl9CiAKIAkJCXJldHVybiAkc2VnbWVudHM7CiAJCX0KIAotCQkvLyBJZiB3ZSd2ZSBnb3R0ZW4gdGhpcyBmYXIgaXQgbWVhbnMgdGhhdCB0aGUgVVJJIGRvZXMgbm90IGNvcnJlbGF0ZSB0byBhIHZhbGlkCi0JCS8vIGNvbnRyb2xsZXIgY2xhc3MuIFdlIHdpbGwgbm93IHNlZSBpZiB0aGVyZSBpcyBhbiBvdmVycmlkZQotCQlpZiAoICEgZW1wdHkoJHRoaXMtPnJvdXRlc1snNDA0X292ZXJyaWRlJ10pKQotCQl7Ci0JCQlpZiAoc3NjYW5mKCR0aGlzLT5yb3V0ZXNbJzQwNF9vdmVycmlkZSddLCAnJVteL10vJXMnLCAkY2xhc3MsICRtZXRob2QpICE9PSAyKQotCQkJewotCQkJCSRtZXRob2QgPSAnaW5kZXgnOwotCQkJfQotCi0JCQlyZXR1cm4gYXJyYXkoJGNsYXNzLCAkbWV0aG9kKTsKLQkJfQotCi0JCS8vIE5vdGhpbmcgZWxzZSB0byBkbyBhdCB0aGlzIHBvaW50IGJ1dCBzaG93IGEgNDA0Ci0JCXNob3dfNDA0KCRzZWdtZW50c1swXSk7CisJCS8vIFRoaXMgbWVhbnMgdGhhdCBhbGwgc2VnbWVudHMgd2VyZSBhY3R1YWxseSBkaXJlY3RvcmllcworCQlyZXR1cm4gJHNlZ21lbnRzOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNDcsMTYgKzM1Myw0MyBAQAogCQkvLyBUdXJuIHRoZSBzZWdtZW50IGFycmF5IGludG8gYSBVUkkgc3RyaW5nCiAJCSR1cmkgPSBpbXBsb2RlKCcvJywgJHRoaXMtPnVyaS0+c2VnbWVudHMpOwogCisJCS8vIEdldCBIVFRQIHZlcmIKKwkJJGh0dHBfdmVyYiA9IGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddKSA/IHN0cnRvbG93ZXIoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pIDogJ2NsaSc7CisKIAkJLy8gSXMgdGhlcmUgYSBsaXRlcmFsIG1hdGNoPyAgSWYgc28gd2UncmUgZG9uZQotCQlpZiAoaXNzZXQoJHRoaXMtPnJvdXRlc1skdXJpXSkgJiYgaXNfc3RyaW5nKCR0aGlzLT5yb3V0ZXNbJHVyaV0pKQorCQlpZiAoaXNzZXQoJHRoaXMtPnJvdXRlc1skdXJpXSkpCiAJCXsKLQkJCXJldHVybiAkdGhpcy0+X3NldF9yZXF1ZXN0KGV4cGxvZGUoJy8nLCAkdGhpcy0+cm91dGVzWyR1cmldKSk7CisJCQkvLyBDaGVjayBkZWZhdWx0IHJvdXRlcyBmb3JtYXQKKwkJCWlmIChpc19zdHJpbmcoJHRoaXMtPnJvdXRlc1skdXJpXSkpCisJCQl7CisJCQkJJHRoaXMtPl9zZXRfcmVxdWVzdChleHBsb2RlKCcvJywgJHRoaXMtPnJvdXRlc1skdXJpXSkpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8vIElzIHRoZXJlIGEgbWF0Y2hpbmcgaHR0cCB2ZXJiPworCQkJZWxzZWlmIChpc19hcnJheSgkdGhpcy0+cm91dGVzWyR1cmldKSAmJiBpc3NldCgkdGhpcy0+cm91dGVzWyR1cmldWyRodHRwX3ZlcmJdKSkKKwkJCXsKKwkJCQkkdGhpcy0+X3NldF9yZXF1ZXN0KGV4cGxvZGUoJy8nLCAkdGhpcy0+cm91dGVzWyR1cmldWyRodHRwX3ZlcmJdKSk7CisJCQkJcmV0dXJuOworCQkJfQogCQl9CiAKLQkJLy8gTG9vcCB0aHJvdWdoIHRoZSByb3V0ZSBhcnJheSBsb29raW5nIGZvciB3aWxkLWNhcmRzCisJCS8vIExvb3AgdGhyb3VnaCB0aGUgcm91dGUgYXJyYXkgbG9va2luZyBmb3Igd2lsZGNhcmRzCiAJCWZvcmVhY2ggKCR0aGlzLT5yb3V0ZXMgYXMgJGtleSA9PiAkdmFsKQogCQl7Ci0JCQkvLyBDb252ZXJ0IHdpbGQtY2FyZHMgdG8gUmVnRXgKKwkJCS8vIENoZWNrIGlmIHJvdXRlIGZvcm1hdCBpcyB1c2luZyBodHRwIHZlcmIKKwkJCWlmIChpc19hcnJheSgkdmFsKSkKKwkJCXsKKwkJCQlpZiAoaXNzZXQoJHZhbFskaHR0cF92ZXJiXSkpCisJCQkJeworCQkJCQkkdmFsID0gJHZhbFskaHR0cF92ZXJiXTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCisJCQkvLyBDb252ZXJ0IHdpbGRjYXJkcyB0byBSZWdFeAogCQkJJGtleSA9IHN0cl9yZXBsYWNlKGFycmF5KCc6YW55JywgJzpudW0nKSwgYXJyYXkoJ1teL10rJywgJ1swLTldKycpLCAka2V5KTsKIAogCQkJLy8gRG9lcyB0aGUgUmVnRXggbWF0Y2g/CkBAIC00MDYsMTMgKzQzOSwxNCBAQAogCQkJCQkkdmFsID0gcHJlZ19yZXBsYWNlKCcjXicuJGtleS4nJCMnLCAkdmFsLCAkdXJpKTsKIAkJCQl9CiAKLQkJCQlyZXR1cm4gJHRoaXMtPl9zZXRfcmVxdWVzdChleHBsb2RlKCcvJywgJHZhbCkpOworCQkJCSR0aGlzLT5fc2V0X3JlcXVlc3QoZXhwbG9kZSgnLycsICR2YWwpKTsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCX0KIAogCQkvLyBJZiB3ZSBnb3QgdGhpcyBmYXIgaXQgbWVhbnMgd2UgZGlkbid0IGVuY291bnRlciBhCiAJCS8vIG1hdGNoaW5nIHJvdXRlIHNvIHdlJ2xsIHNldCB0aGUgc2l0ZSBkZWZhdWx0IHJvdXRlCi0JCSR0aGlzLT5fc2V0X3JlcXVlc3QoJHRoaXMtPnVyaS0+c2VnbWVudHMpOworCQkkdGhpcy0+X3NldF9yZXF1ZXN0KGFycmF5X3ZhbHVlcygkdGhpcy0+dXJpLT5zZWdtZW50cykpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NzMsMTEgKzUwNywxOSBAQAogCSAqIFNldCBkaXJlY3RvcnkgbmFtZQogCSAqCiAJICogQHBhcmFtCXN0cmluZwkkZGlyCURpcmVjdG9yeSBuYW1lCisJICogQHBhcmFtCWJvb2wJJGFwcGVudAlXaGV0aGVyIHdlJ3JlIGFwcGVuZGluZyByYXRoZXIgdGhlbiBzZXR0aW5nIHRoZSBmdWxsIHZhbHVlCiAJICogQHJldHVybgl2b2lkCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHNldF9kaXJlY3RvcnkoJGRpcikKKwlwdWJsaWMgZnVuY3Rpb24gc2V0X2RpcmVjdG9yeSgkZGlyLCAkYXBwZW5kID0gRkFMU0UpCiAJewotCQkkdGhpcy0+ZGlyZWN0b3J5ID0gc3RyX3JlcGxhY2UoYXJyYXkoJy8nLCAnLicpLCAnJywgJGRpcikuJy8nOworCQlpZiAoJGFwcGVuZCAhPT0gVFJVRSBPUiBlbXB0eSgkdGhpcy0+ZGlyZWN0b3J5KSkKKwkJeworCQkJJHRoaXMtPmRpcmVjdG9yeSA9IHN0cl9yZXBsYWNlKCcuJywgJycsIHRyaW0oJGRpciwgJy8nKSkuJy8nOworCQl9CisJCWVsc2UKKwkJeworCQkJJHRoaXMtPmRpcmVjdG9yeSAuPSBzdHJfcmVwbGFjZSgnLicsICcnLCB0cmltKCRkaXIsICcvJykpLicvJzsKKwkJfQogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00OTYsMzggKzUzOCw2IEBACiAJCXJldHVybiAkdGhpcy0+ZGlyZWN0b3J5OwogCX0KIAotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvKioKLQkgKiBTZXQgY29udHJvbGxlciBvdmVycmlkZXMKLQkgKgotCSAqIEBwYXJhbQlhcnJheQkkcm91dGluZwlSb3V0ZSBvdmVycmlkZXMKLQkgKiBAcmV0dXJuCXZvaWQKLQkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gX3NldF9vdmVycmlkZXMoJHJvdXRpbmcpCi0JewotCQlpZiAoICEgaXNfYXJyYXkoJHJvdXRpbmcpKQotCQl7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoaXNzZXQoJHJvdXRpbmdbJ2RpcmVjdG9yeSddKSkKLQkJewotCQkJJHRoaXMtPnNldF9kaXJlY3RvcnkoJHJvdXRpbmdbJ2RpcmVjdG9yeSddKTsKLQkJfQotCi0JCWlmICggISBlbXB0eSgkcm91dGluZ1snY29udHJvbGxlciddKSkKLQkJewotCQkJJHRoaXMtPnNldF9jbGFzcygkcm91dGluZ1snY29udHJvbGxlciddKTsKLQkJfQotCi0JCWlmIChpc3NldCgkcm91dGluZ1snZnVuY3Rpb24nXSkpCi0JCXsKLQkJCSRyb3V0aW5nWydmdW5jdGlvbiddID0gZW1wdHkoJHJvdXRpbmdbJ2Z1bmN0aW9uJ10pID8gJ2luZGV4JyA6ICRyb3V0aW5nWydmdW5jdGlvbiddOwotCQkJJHRoaXMtPnNldF9tZXRob2QoJHJvdXRpbmdbJ2Z1bmN0aW9uJ10pOwotCQl9Ci0JfQotCiB9CiAKIC8qIEVuZCBvZiBmaWxlIFJvdXRlci5waHAgKi8KZGlmZiAtLWdpdCBhL3N5c3RlbS9jb3JlL1NlY3VyaXR5LnBocCBiL3N5c3RlbS9jb3JlL1NlY3VyaXR5LnBocAppbmRleCAxOTZkNjExLi45NTk1N2EzIDEwMDY0NAotLS0gYS9zeXN0ZW0vY29yZS9TZWN1cml0eS5waHAKKysrIGIvc3lzdGVtL2NvcmUvU2VjdXJpdHkucGhwCkBAIC0zOCw2ICszOCwzMCBAQAogY2xhc3MgQ0lfU2VjdXJpdHkgewogCiAJLyoqCisJICogTGlzdCBvZiBzYW5pdGl6ZSBmaWxlbmFtZSBzdHJpbmdzCisJICoKKwkgKiBAdmFyCWFycmF5CisJICovCisJcHVibGljICRmaWxlbmFtZV9iYWRfY2hhcnMgPQlhcnJheSgKKwkJJy4uLycsICc8IS0tJywgJy0tPicsICc8JywgJz4nLAorCQkiJyIsICciJywgJyYnLCAnJCcsICcjJywKKwkJJ3snLCAnfScsICdbJywgJ10nLCAnPScsCisJCSc7JywgJz8nLCAnJTIwJywgJyUyMicsCisJCSclM2MnLAkJLy8gPAorCQknJTI1M2MnLAkvLyA8CisJCSclM2UnLAkJLy8gPgorCQknJTBlJywJCS8vID4KKwkJJyUyOCcsCQkvLyAoCisJCSclMjknLAkJLy8gKQorCQknJTI1MjgnLAkvLyAoCisJCSclMjYnLAkJLy8gJgorCQknJTI0JywJCS8vICQKKwkJJyUzZicsCQkvLyA/CisJCSclM2InLAkJLy8gOworCQknJTNkJwkJLy8gPQorCSk7CisKKwkvKioKIAkgKiBYU1MgSGFzaAogCSAqCiAJICogUmFuZG9tIEhhc2ggZm9yIHByb3RlY3RpbmcgVVJMcy4KQEAgLTkzLDcgKzExNyw2IEBACiAJCSdkb2N1bWVudC53cml0ZScJPT4gJ1tyZW1vdmVkXScsCiAJCScucGFyZW50Tm9kZScJCT0+ICdbcmVtb3ZlZF0nLAogCQknLmlubmVySFRNTCcJCT0+ICdbcmVtb3ZlZF0nLAotCQknd2luZG93LmxvY2F0aW9uJwk9PiAnW3JlbW92ZWRdJywKIAkJJy1tb3otYmluZGluZycJCT0+ICdbcmVtb3ZlZF0nLAogCQknPCEtLScJCQkJPT4gJyZsdDshLS0nLAogCQknLS0+JwkJCQk9PiAnLS0mZ3Q7JywKQEAgLTEwOCw2ICsxMzEsNyBAQAogCSAqLwogCXByb3RlY3RlZCAkX25ldmVyX2FsbG93ZWRfcmVnZXggPSBhcnJheSgKIAkJJ2phdmFzY3JpcHRccyo6JywKKwkJJyhkb2N1bWVudHwoZG9jdW1lbnRcLik/d2luZG93KVwuKGxvY2F0aW9ufG9uXHcqKScsCiAJCSdleHByZXNzaW9uXHMqKFwofCZcIzQwOyknLCAvLyBDU1MgYW5kIElFCiAJCSd2YnNjcmlwdFxzKjonLCAvLyBJRSwgc3VycHJpc2UhCiAJCSdSZWRpcmVjdFxzKzMwMicsCkBAIC01MjcsMTMgKzU1MSwxMyBAQAogCiAJCWRvCiAJCXsKLQkJCSRtYXRjaGVzID0gJG1hdGNoZXMxID0gMDsKKwkJCSRtMSA9ICRtMiA9IDA7CiAKKwkJCSRzdHIgPSBwcmVnX3JlcGxhY2UoJy8oJiN4MCpbMC05YS1mXXsyLDV9KSg/IVswLTlhLWY7XSkvaVMnLCAnJDE7JywgJHN0ciwgLTEsICRtMSk7CisJCQkkc3RyID0gcHJlZ19yZXBsYWNlKCcvKCYjXGR7Miw0fSkoPyFbMC05O10pL1MnLCAnJDE7JywgJHN0ciwgLTEsICRtMik7CiAJCQkkc3RyID0gaHRtbF9lbnRpdHlfZGVjb2RlKCRzdHIsIEVOVF9DT01QQVQsICRjaGFyc2V0KTsKLQkJCSRzdHIgPSBwcmVnX3JlcGxhY2UoJ34mI3goMCpbMC05YS1mXXsyLDV9KX5laScsICdjaHIoaGV4ZGVjKCJcXDEiKSknLCAkc3RyLCAtMSwgJG1hdGNoZXMpOwotCQkJJHN0ciA9IHByZWdfcmVwbGFjZSgnfiYjKFswLTldezIsNH0pfmUnLCAnY2hyKFxcMSknLCAkc3RyLCAtMSwgJG1hdGNoZXMxKTsKIAkJfQotCQl3aGlsZSAoJG1hdGNoZXMgT1IgJG1hdGNoZXMxKTsKKwkJd2hpbGUgKCRtMSBPUiAkbTIpOwogCiAJCXJldHVybiAkc3RyOwogCX0KQEAgLTU0OSwyNCArNTczLDcgQEAKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gc2FuaXRpemVfZmlsZW5hbWUoJHN0ciwgJHJlbGF0aXZlX3BhdGggPSBGQUxTRSkKIAl7Ci0JCSRiYWQgPSBhcnJheSgKLQkJCScuLi8nLCAnPCEtLScsICctLT4nLCAnPCcsICc+JywKLQkJCSInIiwgJyInLCAnJicsICckJywgJyMnLAotCQkJJ3snLCAnfScsICdbJywgJ10nLCAnPScsCi0JCQknOycsICc/JywgJyUyMCcsICclMjInLAotCQkJJyUzYycsCQkvLyA8Ci0JCQknJTI1M2MnLAkvLyA8Ci0JCQknJTNlJywJCS8vID4KLQkJCSclMGUnLAkJLy8gPgotCQkJJyUyOCcsCQkvLyAoCi0JCQknJTI5JywJCS8vICkKLQkJCSclMjUyOCcsCS8vICgKLQkJCSclMjYnLAkJLy8gJgotCQkJJyUyNCcsCQkvLyAkCi0JCQknJTNmJywJCS8vID8KLQkJCSclM2InLAkJLy8gOwotCQkJJyUzZCcJCS8vID0KLQkJKTsKKwkJJGJhZCA9ICR0aGlzLT5maWxlbmFtZV9iYWRfY2hhcnM7CiAKIAkJaWYgKCAhICRyZWxhdGl2ZV9wYXRoKQogCQl7CkBAIC01OTYsNyArNjAzLDcgQEAKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gc3RyaXBfaW1hZ2VfdGFncygkc3RyKQogCXsKLQkJcmV0dXJuIHByZWdfcmVwbGFjZShhcnJheSgnIzxpbWdccysuKj9zcmNccyo9XHMqWyJcJ10oLis/KVsiXCddLio/XD4jJywgJyM8aW1nXHMrLio/c3JjXHMqPVxzKiguKz8pLio/XD4jJyksICdcXDEnLCAkc3RyKTsKKwkJcmV0dXJuIHByZWdfcmVwbGFjZShhcnJheSgnIzxpbWdbXHMvXSsuKj9zcmNccyo9XHMqWyJcJ10oLis/KVsiXCddLio/XD4jJywgJyM8aW1nW1xzL10rLio/c3JjXHMqPVxzKiguKz8pLio/XD4jJyksICdcXDEnLCAkc3RyKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NDEsOCArNjQ4LDggQEAKIAkgKi8KIAlwcm90ZWN0ZWQgZnVuY3Rpb24gX3JlbW92ZV9ldmlsX2F0dHJpYnV0ZXMoJHN0ciwgJGlzX2ltYWdlKQogCXsKLQkJLy8gQWxsIGphdmFzY3JpcHQgZXZlbnQgaGFuZGxlcnMgKGUuZy4gb25sb2FkLCBvbmNsaWNrLCBvbm1vdXNlb3ZlciksIHN0eWxlLCBhbmQgeG1sbnMKLQkJJGV2aWxfYXR0cmlidXRlcyA9IGFycmF5KCdvblx3KicsICdzdHlsZScsICd4bWxucycsICdmb3JtYWN0aW9uJyk7CisJCS8vIEZvcm1hY3Rpb24sIHN0eWxlLCBhbmQgeG1sbnMKKwkJJGV2aWxfYXR0cmlidXRlcyA9IGFycmF5KCdzdHlsZScsICd4bWxucycsICdmb3JtYWN0aW9uJyk7CiAKIAkJaWYgKCRpc19pbWFnZSA9PT0gVFJVRSkKIAkJewpAQCAtODMwLDE0ICs4MzcsMTUgQEAKIAkJICogQWRkIGEgc2VtaWNvbG9uIGlmIG1pc3NpbmcuICBXZSBkbyB0aGlzIHRvIGVuYWJsZQogCQkgKiB0aGUgY29udmVyc2lvbiBvZiBlbnRpdGllcyB0byBBU0NJSSBsYXRlci4KIAkJICovCi0JCSRzdHIgPSBwcmVnX3JlcGxhY2UoJyMoJlwjP1swLTlhLXpdezIsfSkoW1x4MDAtXHgyMF0pKjs/I2knLCAnXFwxO1xcMicsICRzdHIpOworCQkkc3RyID0gcHJlZ19yZXBsYWNlKCcvKCYjXGR7Miw0fSkoPyFbMC05O10pLycsICckMTsnLCAkc3RyKTsKKwkJJHN0ciA9IHByZWdfcmVwbGFjZSgnLygmW2Etel17Mix9KSg/IVthLXo7XSkvaScsICckMTsnLCAkc3RyKTsKIAogCQkvKgogCQkgKiBWYWxpZGF0ZSBVVEYxNiB0d28gYnl0ZSBlbmNvZGluZyAoeDAwKQogCQkgKgogCQkgKiBKdXN0IGFzIGFib3ZlLCBhZGRzIGEgc2VtaWNvbG9uIGlmIG1pc3NpbmcuCiAJCSAqLwotCQkkc3RyID0gcHJlZ19yZXBsYWNlKCcjKCZcI3g/KShbMC05QS1GXSspOz8jaScsICdcXDFcXDI7JywgJHN0cik7CisJCSRzdHIgPSBwcmVnX3JlcGxhY2UoJy8oJiN4MCpbMC05YS1mXXsyLDV9KSg/IVswLTlhLWY7XSkvaScsICckMTsnLCAkc3RyKTsKIAogCQkvKgogCQkgKiBVbi1Qcm90ZWN0IEdFVCB2YXJpYWJsZXMgaW4gVVJMcwpAQCAtODc3LDcgKzg4NSw3IEBACiAJewogCQlpZiAoJHRoaXMtPl9jc3JmX2hhc2ggPT09ICcnKQogCQl7Ci0JCQkvLyBJZiB0aGUgY29va2llIGV4aXN0cyB3ZSB3aWxsIHVzZSBpdCdzIHZhbHVlLgorCQkJLy8gSWYgdGhlIGNvb2tpZSBleGlzdHMgd2Ugd2lsbCB1c2UgaXRzIHZhbHVlLgogCQkJLy8gV2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0byByZWdlbmVyYXRlIGl0IHdpdGgKIAkJCS8vIGVhY2ggcGFnZSBsb2FkIHNpbmNlIGEgcGFnZSBjb3VsZCBjb250YWluIGVtYmVkZGVkCiAJCQkvLyBzdWItcGFnZXMgY2F1c2luZyB0aGlzIGZlYXR1cmUgdG8gZmFpbApAQCAtODg3LDcgKzg5NSw3IEBACiAJCQkJcmV0dXJuICR0aGlzLT5fY3NyZl9oYXNoID0gJF9DT09LSUVbJHRoaXMtPl9jc3JmX2Nvb2tpZV9uYW1lXTsKIAkJCX0KIAotCQkJJHRoaXMtPl9jc3JmX2hhc2ggPSBtZDUodW5pcWlkKHJhbmQoKSwgVFJVRSkpOworCQkJJHRoaXMtPl9jc3JmX2hhc2ggPSBtZDUodW5pcWlkKG10X3JhbmQoKSwgVFJVRSkpOwogCQkJJHRoaXMtPmNzcmZfc2V0X2Nvb2tpZSgpOwogCQl9CiAKZGlmZiAtLWdpdCBhL3N5c3RlbS9jb3JlL1VSSS5waHAgYi9zeXN0ZW0vY29yZS9VUkkucGhwCmluZGV4IGJjMDg2ZDIuLjEzNjgyY2IgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9jb3JlL1VSSS5waHAKKysrIGIvc3lzdGVtL2NvcmUvVVJJLnBocApAQCAtNDQsMjEgKzQ0LDIxIEBACiAJICoKIAkgKiBAdmFyCWFycmF5CiAJICovCi0JcHVibGljICRrZXl2YWwgPQlhcnJheSgpOworCXB1YmxpYyAka2V5dmFsID0gYXJyYXkoKTsKIAogCS8qKgogCSAqIEN1cnJlbnQgVVJJIHN0cmluZwogCSAqCiAJICogQHZhcglzdHJpbmcKIAkgKi8KLQlwdWJsaWMgJHVyaV9zdHJpbmc7CisJcHVibGljICR1cmlfc3RyaW5nID0gJyc7CiAKIAkvKioKIAkgKiBMaXN0IG9mIFVSSSBzZWdtZW50cwogCSAqCiAJICogQHZhcglhcnJheQogCSAqLwotCXB1YmxpYyAkc2VnbWVudHMgPQlhcnJheSgpOworCXB1YmxpYyAkc2VnbWVudHMgPSBhcnJheSgpOwogCiAJLyoqCiAJICogUmUtaW5kZXhlZCBsaXN0IG9mIFVSSSBzZWdtZW50cwpAQCAtNjcsOTAgKzY3LDY3IEBACiAJICoKIAkgKiBAdmFyCWFycmF5CiAJICovCi0JcHVibGljICRyc2VnbWVudHMgPQlhcnJheSgpOworCXB1YmxpYyAkcnNlZ21lbnRzID0gYXJyYXkoKTsKKworCS8qKgorCSAqIFBlcm1pdHRlZCBVUkkgY2hhcnMKKwkgKgorCSAqIFBDUkUgY2hhcmFjdGVyIGdyb3VwIGFsbG93ZWQgaW4gVVJJIHNlZ21lbnRzCisJICoKKwkgKiBAdmFyCXN0cmluZworCSAqLworCXByb3RlY3RlZCAkX3Blcm1pdHRlZF91cmlfY2hhcnM7CiAKIAkvKioKIAkgKiBDbGFzcyBjb25zdHJ1Y3RvcgogCSAqCi0JICogU2ltcGx5IGdsb2JhbGl6ZXMgdGhlICRSVFIgb2JqZWN0LiBUaGUgZnJvbnQKLQkgKiBsb2FkcyB0aGUgUm91dGVyIGNsYXNzIGVhcmx5IG9uIHNvIGl0J3Mgbm90IGF2YWlsYWJsZQotCSAqIG5vcm1hbGx5IGFzIG90aGVyIGNsYXNzZXMgYXJlLgotCSAqCiAJICogQHJldHVybgl2b2lkCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKIAl7CiAJCSR0aGlzLT5jb25maWcgPSYgbG9hZF9jbGFzcygnQ29uZmlnJywgJ2NvcmUnKTsKLQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ1VSSSBDbGFzcyBJbml0aWFsaXplZCcpOwotCX0KIAotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvKioKLQkgKiBGZXRjaCBVUkkgU3RyaW5nCi0JICoKLQkgKiBAdXNlZC1ieQlDSV9Sb3V0ZXIKLQkgKiBAcmV0dXJuCXZvaWQKLQkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gX2ZldGNoX3VyaV9zdHJpbmcoKQotCXsKLQkJJHByb3RvY29sID0gc3RydG91cHBlcigkdGhpcy0+Y29uZmlnLT5pdGVtKCd1cmlfcHJvdG9jb2wnKSk7Ci0KLQkJaWYgKCRwcm90b2NvbCA9PT0gJ0FVVE8nKQorCQkvLyBJZiBxdWVyeSBzdHJpbmdzIGFyZSBlbmFibGVkLCB3ZSBkb24ndCBuZWVkIHRvIHBhcnNlIGFueSBzZWdtZW50cy4KKwkJLy8gSG93ZXZlciwgdGhleSBkb24ndCBtYWtlIHNlbnNlIHVuZGVyIENMSS4KKwkJaWYgKGlzX2NsaSgpIE9SICR0aGlzLT5jb25maWctPml0ZW0oJ2VuYWJsZV9xdWVyeV9zdHJpbmdzJykgIT09IFRSVUUpCiAJCXsKLQkJCS8vIElzIHRoZSByZXF1ZXN0IGNvbWluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmU/Ci0JCQlpZiAoJHRoaXMtPl9pc19jbGlfcmVxdWVzdCgpKQorCQkJJHRoaXMtPl9wZXJtaXR0ZWRfdXJpX2NoYXJzID0gJHRoaXMtPmNvbmZpZy0+aXRlbSgncGVybWl0dGVkX3VyaV9jaGFycycpOworCisJCQkvLyBJZiBpdCdzIGEgQ0xJIHJlcXVlc3QsIGlnbm9yZSB0aGUgY29uZmlndXJhdGlvbgorCQkJaWYgKGlzX2NsaSgpIE9SICgkcHJvdG9jb2wgPSBzdHJ0b3VwcGVyKCR0aGlzLT5jb25maWctPml0ZW0oJ3VyaV9wcm90b2NvbCcpKSkgPT09ICdDTEknKQogCQkJewogCQkJCSR0aGlzLT5fc2V0X3VyaV9zdHJpbmcoJHRoaXMtPl9wYXJzZV9hcmd2KCkpOwotCQkJCXJldHVybjsKIAkJCX0KLQotCQkJLy8gSXMgdGhlcmUgYSBQQVRIX0lORk8gdmFyaWFibGU/IFRoaXMgc2hvdWxkIGJlIHRoZSBlYXNpZXN0IHNvbHV0aW9uLgotCQkJaWYgKGlzc2V0KCRfU0VSVkVSWydQQVRIX0lORk8nXSkpCisJCQllbHNlaWYgKCRwcm90b2NvbCA9PT0gJ0FVVE8nKQogCQkJewotCQkJCSR0aGlzLT5fc2V0X3VyaV9zdHJpbmcoJF9TRVJWRVJbJ1BBVEhfSU5GTyddKTsKLQkJCQlyZXR1cm47CisJCQkJLy8gSXMgdGhlcmUgYSBQQVRIX0lORk8gdmFyaWFibGU/IFRoaXMgc2hvdWxkIGJlIHRoZSBlYXNpZXN0IHNvbHV0aW9uLgorCQkJCWlmIChpc3NldCgkX1NFUlZFUlsnUEFUSF9JTkZPJ10pKQorCQkJCXsKKwkJCQkJJHRoaXMtPl9zZXRfdXJpX3N0cmluZygkX1NFUlZFUlsnUEFUSF9JTkZPJ10pOworCQkJCX0KKwkJCQkvLyBObyBQQVRIX0lORk8/IExldCdzIHRyeSBSRVFVU1RfVVJJIG9yIFFVRVJZX1NUUklORyB0aGVuCisJCQkJZWxzZWlmICgoJHVyaSA9ICR0aGlzLT5fcGFyc2VfcmVxdWVzdF91cmkoKSkgIT09ICcnIE9SICgkdXJpID0gJHRoaXMtPl9wYXJzZV9xdWVyeV9zdHJpbmcoKSkgIT09ICcnKQorCQkJCXsKKwkJCQkJJHRoaXMtPl9zZXRfdXJpX3N0cmluZygkdXJpKTsKKwkJCQl9CisJCQkJLy8gQXMgYSBsYXN0IGRpdGNoIGVmZm9yLCBsZXQncyB0cnkgdXNpbmcgdGhlICRfR0VUIGFycmF5CisJCQkJZWxzZWlmIChpc19hcnJheSgkX0dFVCkgJiYgY291bnQoJF9HRVQpID09PSAxICYmIHRyaW0oa2V5KCRfR0VUKSwgJy8nKSAhPT0gJycpCisJCQkJeworCQkJCQkkdGhpcy0+X3NldF91cmlfc3RyaW5nKGtleSgkX0dFVCkpOworCQkJCX0KIAkJCX0KLQotCQkJLy8gTGV0J3MgdHJ5IFJFUVVFU1RfVVJJIHRoZW4sIHRoaXMgd2lsbCB3b3JrIGluIG1vc3Qgc2l0dWF0aW9ucwotCQkJaWYgKCgkdXJpID0gJHRoaXMtPl9wYXJzZV9yZXF1ZXN0X3VyaSgpKSAhPT0gJycpCisJCQllbHNlaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICgkbWV0aG9kID0gJ19wYXJzZV8nLnN0cnRvbG93ZXIoJHByb3RvY29sKSkpKQogCQkJeworCQkJCSR0aGlzLT5fc2V0X3VyaV9zdHJpbmcoJHRoaXMtPiRtZXRob2QoKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJJHVyaSA9IGlzc2V0KCRfU0VSVkVSWyRwcm90b2NvbF0pID8gJF9TRVJWRVJbJHByb3RvY29sXSA6IEBnZXRlbnYoJHByb3RvY29sKTsKIAkJCQkkdGhpcy0+X3NldF91cmlfc3RyaW5nKCR1cmkpOwotCQkJCXJldHVybjsKIAkJCX0KLQotCQkJLy8gTm8gUkVRVUVTVF9VUkkgZWl0aGVyPy4uLiBXaGF0IGFib3V0IFFVRVJZX1NUUklORz8KLQkJCWlmICgoJHVyaSA9ICR0aGlzLT5fcGFyc2VfcXVlcnlfc3RyaW5nKCkpICE9PSAnJykKLQkJCXsKLQkJCQkkdGhpcy0+X3NldF91cmlfc3RyaW5nKCR1cmkpOwotCQkJCXJldHVybjsKLQkJCX0KLQotCQkJLy8gQXMgYSBsYXN0IGRpdGNoIGVmZm9ydCBsZXQncyB0cnkgdXNpbmcgdGhlICRfR0VUIGFycmF5Ci0JCQlpZiAoaXNfYXJyYXkoJF9HRVQpICYmIGNvdW50KCRfR0VUKSA9PT0gMSAmJiB0cmltKGtleSgkX0dFVCksICcvJykgIT09ICcnKQotCQkJewotCQkJCSR0aGlzLT5fc2V0X3VyaV9zdHJpbmcoa2V5KCRfR0VUKSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQkvLyBXZSd2ZSBleGhhdXN0ZWQgYWxsIG91ciBvcHRpb25zLi4uCi0JCQkkdGhpcy0+dXJpX3N0cmluZyA9ICcnOwotCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKCRwcm90b2NvbCA9PT0gJ0NMSScpCi0JCXsKLQkJCSR0aGlzLT5fc2V0X3VyaV9zdHJpbmcoJHRoaXMtPl9wYXJzZV9hcmd2KCkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWVsc2VpZiAobWV0aG9kX2V4aXN0cygkdGhpcywgKCRtZXRob2QgPSAnX3BhcnNlXycuc3RydG9sb3dlcigkcHJvdG9jb2wpKSkpCi0JCXsKLQkJCSR0aGlzLT5fc2V0X3VyaV9zdHJpbmcoJHRoaXMtPiRtZXRob2QoKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkkdXJpID0gaXNzZXQoJF9TRVJWRVJbJHByb3RvY29sXSkgPyAkX1NFUlZFUlskcHJvdG9jb2xdIDogQGdldGVudigkcHJvdG9jb2wpOwotCQkkdGhpcy0+X3NldF91cmlfc3RyaW5nKCR1cmkpOworCQlsb2dfbWVzc2FnZSgnZGVidWcnLCAnVVJJIENsYXNzIEluaXRpYWxpemVkJyk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2NSw2ICsxNDIsMzUgQEAKIAl7CiAJCS8vIEZpbHRlciBvdXQgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0cmltIHNsYXNoZXMKIAkJJHRoaXMtPnVyaV9zdHJpbmcgPSB0cmltKHJlbW92ZV9pbnZpc2libGVfY2hhcmFjdGVycygkc3RyLCBGQUxTRSksICcvJyk7CisKKwkJaWYgKCR0aGlzLT51cmlfc3RyaW5nICE9PSAnJykKKwkJeworCQkJLy8gUmVtb3ZlIHRoZSBVUkwgc3VmZml4LCBpZiBwcmVzZW50CisJCQlpZiAoKCRzdWZmaXggPSAoc3RyaW5nKSAkdGhpcy0+Y29uZmlnLT5pdGVtKCd1cmxfc3VmZml4JykpICE9PSAnJykKKwkJCXsKKwkJCQkkc2xlbiA9IHN0cmxlbigkc3VmZml4KTsKKworCQkJCWlmIChzdWJzdHIoJHRoaXMtPnVyaV9zdHJpbmcsIC0kc2xlbikgPT09ICRzdWZmaXgpCisJCQkJeworCQkJCQkkdGhpcy0+dXJpX3N0cmluZyA9IHN1YnN0cigkdGhpcy0+dXJpX3N0cmluZywgMCwgLSRzbGVuKTsKKwkJCQl9CisJCQl9CisKKwkJCSR0aGlzLT5zZWdtZW50c1swXSA9IE5VTEw7CisJCQkvLyBQb3B1bGF0ZSB0aGUgc2VnbWVudHMgYXJyYXkKKwkJCWZvcmVhY2ggKGV4cGxvZGUoJy8nLCBwcmVnX3JlcGxhY2UoJ3wvKiguKz8pLyokfCcsICdcXDEnLCAkdGhpcy0+dXJpX3N0cmluZykpIGFzICR2YWwpCisJCQl7CisJCQkJLy8gRmlsdGVyIHNlZ21lbnRzIGZvciBzZWN1cml0eQorCQkJCSR2YWwgPSB0cmltKCR0aGlzLT5maWx0ZXJfdXJpKCR2YWwpKTsKKworCQkJCWlmICgkdmFsICE9PSAnJykKKwkJCQl7CisJCQkJCSR0aGlzLT5zZWdtZW50c1tdID0gJHZhbDsKKwkJCQl9CisJCQl9CisKKwkJCXVuc2V0KCR0aGlzLT5zZWdtZW50c1swXSk7CisJCX0KIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjI1LDM2ICsyMzEsMTAgQEAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJLyoqCi0JICogUmVtb3ZlIHJlbGF0aXZlIGRpcmVjdG9yeSAoLi4vKSBhbmQgbXVsdGkgc2xhc2hlcyAoLy8vKQotCSAqCi0JICogRG8gc29tZSBmaW5hbCBjbGVhbmluZyBvZiB0aGUgVVJJIGFuZCByZXR1cm4gaXQsIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gc2VsZjo6X3BhcnNlX3JlcXVlc3RfdXJpKCkKLQkgKgotCSAqIEBwYXJhbQlzdHJpbmcJJHVybAotCSAqIEByZXR1cm4Jc3RyaW5nCi0JICovCi0JcHJvdGVjdGVkIGZ1bmN0aW9uIF9yZW1vdmVfcmVsYXRpdmVfZGlyZWN0b3J5KCR1cmkpCi0JewotCQkkdXJpcyA9IGFycmF5KCk7Ci0JCSR0b2sgPSBzdHJ0b2soJHVyaSwgJy8nKTsKLQkJd2hpbGUgKCR0b2sgIT09IEZBTFNFKQotCQl7Ci0JCQlpZiAoKCAhIGVtcHR5KCR0b2spIE9SICR0b2sgPT09ICcwJykgJiYgJHRvayAhPT0gJy4uJykKLQkJCXsKLQkJCQkkdXJpc1tdID0gJHRvazsKLQkJCX0KLQkJCSR0b2sgPSBzdHJ0b2soJy8nKTsKLQkJfQotCQlyZXR1cm4gaW1wbG9kZSgnLycsICR1cmlzKTsKLQl9Ci0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JLyoqCiAJICogUGFyc2UgUVVFUllfU1RSSU5HCiAJICoKIAkgKiBXaWxsIHBhcnNlIFFVRVJZX1NUUklORyBhbmQgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIFVSSSBmcm9tIGl0LgogCSAqCi0JICogQHVzZWQtYnkJQ0lfVVJJOjpfZmV0Y2hfdXJpX3N0cmluZygpCiAJICogQHJldHVybglzdHJpbmcKIAkgKi8KIAlwcm90ZWN0ZWQgZnVuY3Rpb24gX3BhcnNlX3F1ZXJ5X3N0cmluZygpCkBAIC0yODAsMjMgKzI2MCw2IEBACiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCS8qKgotCSAqIElzIENMSSBSZXF1ZXN0PwotCSAqCi0JICogRHVwbGljYXRlIG9mIG1ldGhvZCBmcm9tIHRoZSBJbnB1dCBjbGFzcyB0byB0ZXN0IHRvIHNlZSBpZgotCSAqIGEgcmVxdWVzdCB3YXMgbWFkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0JICoKLQkgKiBAc2VlCQlDSV9JbnB1dDo6aXNfY2xpX3JlcXVlc3QoKQotCSAqIEB1c2VkLWJ5CUNJX1VSSTo6X2ZldGNoX3VyaV9zdHJpbmcoKQotCSAqIEByZXR1cm4gCWJvb2wKLQkgKi8KLQlwcm90ZWN0ZWQgZnVuY3Rpb24gX2lzX2NsaV9yZXF1ZXN0KCkKLQl7Ci0JCXJldHVybiAoUEhQX1NBUEkgPT09ICdjbGknKSBPUiBkZWZpbmVkKCdTVERJTicpOwotCX0KLQotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvKioKIAkgKiBQYXJzZSBDTEkgYXJndW1lbnRzCiAJICoKIAkgKiBUYWtlIGVhY2ggY29tbWFuZCBsaW5lIGFyZ3VtZW50IGFuZCBhc3N1bWUgaXQgaXMgYSBVUkkgc2VnbWVudC4KQEAgLTMxMiwxMDQgKzI3NSw1MiBAQAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkvKioKKwkgKiBSZW1vdmUgcmVsYXRpdmUgZGlyZWN0b3J5ICguLi8pIGFuZCBtdWx0aSBzbGFzaGVzICgvLy8pCisJICoKKwkgKiBEbyBzb21lIGZpbmFsIGNsZWFuaW5nIG9mIHRoZSBVUkkgYW5kIHJldHVybiBpdCwgY3VycmVudGx5IG9ubHkgdXNlZCBpbiBzZWxmOjpfcGFyc2VfcmVxdWVzdF91cmkoKQorCSAqCisJICogQHBhcmFtCXN0cmluZwkkdXJsCisJICogQHJldHVybglzdHJpbmcKKwkgKi8KKwlwcm90ZWN0ZWQgZnVuY3Rpb24gX3JlbW92ZV9yZWxhdGl2ZV9kaXJlY3RvcnkoJHVyaSkKKwl7CisJCSR1cmlzID0gYXJyYXkoKTsKKwkJJHRvayA9IHN0cnRvaygkdXJpLCAnLycpOworCQl3aGlsZSAoJHRvayAhPT0gRkFMU0UpCisJCXsKKwkJCWlmICgoICEgZW1wdHkoJHRvaykgT1IgJHRvayA9PT0gJzAnKSAmJiAkdG9rICE9PSAnLi4nKQorCQkJeworCQkJCSR1cmlzW10gPSAkdG9rOworCQkJfQorCQkJJHRvayA9IHN0cnRvaygnLycpOworCQl9CisKKwkJcmV0dXJuIGltcGxvZGUoJy8nLCAkdXJpcyk7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgogCSAqIEZpbHRlciBVUkkKIAkgKgogCSAqIEZpbHRlcnMgc2VnbWVudHMgZm9yIG1hbGljaW91cyBjaGFyYWN0ZXJzLgogCSAqCi0JICogQHVzZWQtYnkJQ0lfUm91dGVyCiAJICogQHBhcmFtCXN0cmluZwkkc3RyCiAJICogQHJldHVybglzdHJpbmcKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gX2ZpbHRlcl91cmkoJHN0cikKKwlwdWJsaWMgZnVuY3Rpb24gZmlsdGVyX3VyaSgkc3RyKQogCXsKLQkJaWYgKCRzdHIgIT09ICcnICYmICR0aGlzLT5jb25maWctPml0ZW0oJ3Blcm1pdHRlZF91cmlfY2hhcnMnKSAhPSAnJyAmJiAkdGhpcy0+Y29uZmlnLT5pdGVtKCdlbmFibGVfcXVlcnlfc3RyaW5ncycpID09PSBGQUxTRSkKKwkJaWYgKCAhIGVtcHR5KCRzdHIpICYmICEgZW1wdHkoJHRoaXMtPl9wZXJtaXR0ZWRfdXJpX2NoYXJzKSAmJiAhIHByZWdfbWF0Y2goJy9eWycuJHRoaXMtPl9wZXJtaXR0ZWRfdXJpX2NoYXJzLiddKyQvaScuKFVURjhfRU5BQkxFRCA/ICd1JyA6ICcnKSwgJHN0cikpCiAJCXsKLQkJCS8vIHByZWdfcXVvdGUoKSBpbiBQSFAgNS4zIGVzY2FwZXMgLSwgc28gdGhlIHN0cl9yZXBsYWNlKCkgYW5kIGFkZGl0aW9uIG9mIC0gdG8gcHJlZ19xdW90ZSgpIGlzIHRvIG1haW50YWluIGJhY2t3YXJkcwotCQkJLy8gY29tcGF0aWJpbGl0eSBhcyBtYW55IGFyZSB1bmF3YXJlIG9mIGhvdyBjaGFyYWN0ZXJzIGluIHRoZSBwZXJtaXR0ZWRfdXJpX2NoYXJzIHdpbGwgYmUgcGFyc2VkIGFzIGEgcmVnZXggcGF0dGVybgotCQkJaWYgKCAhIHByZWdfbWF0Y2goJ3xeWycuc3RyX3JlcGxhY2UoYXJyYXkoJ1xcLScsICdcLScpLCAnLScsIHByZWdfcXVvdGUoJHRoaXMtPmNvbmZpZy0+aXRlbSgncGVybWl0dGVkX3VyaV9jaGFycycpLCAnLScpKS4nXSskfGknLCAkc3RyKSkKLQkJCXsKLQkJCQlzaG93X2Vycm9yKCdUaGUgVVJJIHlvdSBzdWJtaXR0ZWQgaGFzIGRpc2FsbG93ZWQgY2hhcmFjdGVycy4nLCA0MDApOwotCQkJfQorCQkJc2hvd19lcnJvcignVGhlIFVSSSB5b3Ugc3VibWl0dGVkIGhhcyBkaXNhbGxvd2VkIGNoYXJhY3RlcnMuJywgNDAwKTsKIAkJfQogCiAJCS8vIENvbnZlcnQgcHJvZ3JhbWF0aWMgY2hhcmFjdGVycyB0byBlbnRpdGllcyBhbmQgcmV0dXJuCiAJCXJldHVybiBzdHJfcmVwbGFjZSgKLQkJCQkJYXJyYXkoJyQnLCAgICAgJygnLCAgICAgJyknLCAgICAgJyUyOCcsICAgJyUyOScpLCAvLyBCYWQKLQkJCQkJYXJyYXkoJyYjMzY7JywgJyYjNDA7JywgJyYjNDE7JywgJyYjNDA7JywgJyYjNDE7JyksIC8vIEdvb2QKLQkJCQkJJHN0cik7Ci0JfQotCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCS8qKgotCSAqIFJlbW92ZSBVUkwgc3VmZml4Ci0JICoKLQkgKiBSZW1vdmVzIHRoZSBzdWZmaXggZnJvbSB0aGUgVVJMIGlmIG5lZWRlZC4KLQkgKgotCSAqIEB1c2VkLWJ5CUNJX1JvdXRlcgotCSAqIEByZXR1cm4Jdm9pZAotCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBfcmVtb3ZlX3VybF9zdWZmaXgoKQotCXsKLQkJJHN1ZmZpeCA9IChzdHJpbmcpICR0aGlzLT5jb25maWctPml0ZW0oJ3VybF9zdWZmaXgnKTsKLQotCQlpZiAoJHN1ZmZpeCA9PT0gJycpCi0JCXsKLQkJCXJldHVybjsKLQkJfQotCi0JCSRzbGVuID0gc3RybGVuKCRzdWZmaXgpOwotCi0JCWlmIChzdWJzdHIoJHRoaXMtPnVyaV9zdHJpbmcsIC0kc2xlbikgPT09ICRzdWZmaXgpCi0JCXsKLQkJCSR0aGlzLT51cmlfc3RyaW5nID0gc3Vic3RyKCR0aGlzLT51cmlfc3RyaW5nLCAwLCAtJHNsZW4pOwotCQl9Ci0JfQotCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCS8qKgotCSAqIEV4cGxvZGUgVVJJIHNlZ21lbnRzCi0JICoKLQkgKiBUaGUgaW5kaXZpZHVhbCBzZWdtZW50cyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgJHRoaXMtPnNlZ21lbnRzIGFycmF5LgotCSAqCi0JICogQHNlZQkJQ0lfVVJJOjokc2VnbWVudHMKLQkgKiBAdXNlZC1ieQlDSV9Sb3V0ZXIKLQkgKiBAcmV0dXJuCXZvaWQKLQkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gX2V4cGxvZGVfc2VnbWVudHMoKQotCXsKLQkJZm9yZWFjaCAoZXhwbG9kZSgnLycsIHByZWdfcmVwbGFjZSgnfC8qKC4rPykvKiR8JywgJ1xcMScsICR0aGlzLT51cmlfc3RyaW5nKSkgYXMgJHZhbCkKLQkJewotCQkJLy8gRmlsdGVyIHNlZ21lbnRzIGZvciBzZWN1cml0eQotCQkJJHZhbCA9IHRyaW0oJHRoaXMtPl9maWx0ZXJfdXJpKCR2YWwpKTsKLQotCQkJaWYgKCR2YWwgIT09ICcnKQotCQkJewotCQkJCSR0aGlzLT5zZWdtZW50c1tdID0gJHZhbDsKLQkJCX0KLQkJfQotCX0KLQotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvKioKLQkgKiBSZS1pbmRleCBTZWdtZW50cwotCSAqCi0JICogUmUtaW5kZXhlcyB0aGUgQ0lfVVJJOjokc2VnbWVudCBhcnJheSBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAxIHJhdGhlcgotCSAqIHRoYW4gMC4gRG9pbmcgc28gbWFrZXMgaXQgc2ltcGxlciB0byB1c2UgbWV0aG9kcyBsaWtlCi0JICogQ0lfVVJJOjpzZWdtZW50KG4pIHNpbmNlIHRoZXJlIGlzIGEgMToxIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZQotCSAqIHNlZ21lbnQgYXJyYXkgYW5kIHRoZSBhY3R1YWwgc2VnbWVudHMuCi0JICoKLQkgKiBAdXNlZC1ieQlDSV9Sb3V0ZXIKLQkgKiBAcmV0dXJuCXZvaWQKLQkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gX3JlaW5kZXhfc2VnbWVudHMoKQotCXsKLQkJYXJyYXlfdW5zaGlmdCgkdGhpcy0+c2VnbWVudHMsIE5VTEwpOwotCQlhcnJheV91bnNoaWZ0KCR0aGlzLT5yc2VnbWVudHMsIE5VTEwpOwotCQl1bnNldCgkdGhpcy0+c2VnbWVudHNbMF0pOwotCQl1bnNldCgkdGhpcy0+cnNlZ21lbnRzWzBdKTsKKwkJCWFycmF5KCckJywgICAgICcoJywgICAgICcpJywgICAgICclMjgnLCAgICclMjknKSwJLy8gQmFkCisJCQlhcnJheSgnJiMzNjsnLCAnJiM0MDsnLCAnJiM0MTsnLCAnJiM0MDsnLCAnJiM0MTsnKSwJLy8gR29vZAorCQkJJHN0cgorCQkpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MjAsMTIgKzYzMSw3IEBACiAJewogCQlnbG9iYWwgJFJUUjsKIAotCQlpZiAoKCRkaXIgPSAkUlRSLT5kaXJlY3RvcnkpID09PSAnLycpCi0JCXsKLQkJCSRkaXIgPSAnJzsKLQkJfQotCi0JCXJldHVybiAkZGlyLmltcGxvZGUoJy8nLCAkdGhpcy0+cnNlZ21lbnRfYXJyYXkoKSk7CisJCXJldHVybiBsdHJpbSgkUlRSLT5kaXJlY3RvcnksICcvJykuaW1wbG9kZSgnLycsICR0aGlzLT5yc2VnbWVudHMpOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvc3lzdGVtL2NvcmUvVXRmOC5waHAgYi9zeXN0ZW0vY29yZS9VdGY4LnBocAppbmRleCBhNzg2MTZkLi44MjhhOGFlIDEwMDY0NAotLS0gYS9zeXN0ZW0vY29yZS9VdGY4LnBocAorKysgYi9zeXN0ZW0vY29yZS9VdGY4LnBocApAQCAtNjYsNyArNjYsNyBAQAogCQl9CiAKIAkJaWYgKAotCQkJQHByZWdfbWF0Y2goJy8uL3UnLCAnw6knKSA9PT0gMQkvLyBQQ1JFIG11c3Qgc3VwcG9ydCBVVEYtOAorCQkJZGVmaW5lZCgnUFJFR19CQURfVVRGOF9FUlJPUicpCS8vIFBDUkUgbXVzdCBzdXBwb3J0IFVURi04CiAJCQkmJiBmdW5jdGlvbl9leGlzdHMoJ2ljb252JykJLy8gaWNvbnYgbXVzdCBiZSBpbnN0YWxsZWQKIAkJCSYmIE1CX0VOQUJMRUQgPT09IFRSVUUJCS8vIG1ic3RyaW5nIG11c3QgYmUgZW5hYmxlZAogCQkJJiYgJGNoYXJzZXQgPT09ICdVVEYtOCcJCS8vIEFwcGxpY2F0aW9uIGNoYXJzZXQgbXVzdCBiZSBVVEYtOApkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL0RCLnBocCBiL3N5c3RlbS9kYXRhYmFzZS9EQi5waHAKaW5kZXggODc0MjgwMC4uOTZkYTg3YyAxMDA2NDQKLS0tIGEvc3lzdGVtL2RhdGFiYXNlL0RCLnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvREIucGhwCkBAIC0yMDYsMTEgKzIwNiw2IEBACiAJCSREQi0+aW5pdGlhbGl6ZSgpOwogCX0KIAotCWlmICggISBlbXB0eSgkcGFyYW1zWydzdHJpY3RvbiddKSkKLQl7Ci0JCSREQi0+cXVlcnkoJ1NFVCBTRVNTSU9OIHNxbF9tb2RlPSJTVFJJQ1RfQUxMX1RBQkxFUyInKTsKLQl9Ci0KIAlyZXR1cm4gJERCOwogfQogCmRpZmYgLS1naXQgYS9zeXN0ZW0vZGF0YWJhc2UvREJfZHJpdmVyLnBocCBiL3N5c3RlbS9kYXRhYmFzZS9EQl9kcml2ZXIucGhwCmluZGV4IDQyNTY1N2UuLmYwNjZiNTggMTAwNjQ0Ci0tLSBhL3N5c3RlbS9kYXRhYmFzZS9EQl9kcml2ZXIucGhwCisrKyBiL3N5c3RlbS9kYXRhYmFzZS9EQl9kcml2ZXIucGhwCkBAIC02MjQsNyArNjI0LDE0IEBACiAJCQkJLy8gaWYgdHJhbnNhY3Rpb25zIGFyZSBlbmFibGVkLiBJZiB3ZSBkb24ndCBjYWxsIHRoaXMgaGVyZQogCQkJCS8vIHRoZSBlcnJvciBtZXNzYWdlIHdpbGwgdHJpZ2dlciBhbiBleGl0LCBjYXVzaW5nIHRoZQogCQkJCS8vIHRyYW5zYWN0aW9ucyB0byByZW1haW4gaW4gbGltYm8uCi0JCQkJJHRoaXMtPl90cmFuc19kZXB0aCA+IDAgJiYgJHRoaXMtPnRyYW5zX2NvbXBsZXRlKCk7CisJCQkJaWYgKCR0aGlzLT5fdHJhbnNfZGVwdGggIT09IDApCisJCQkJeworCQkJCQlkbworCQkJCQl7CisJCQkJCQkkdGhpcy0+dHJhbnNfY29tcGxldGUoKTsKKwkJCQkJfQorCQkJCQl3aGlsZSAoJHRoaXMtPl90cmFuc19kZXB0aCAhPT0gMCk7CisJCQkJfQogCiAJCQkJLy8gRGlzcGxheSBlcnJvcnMKIAkJCQlyZXR1cm4gJHRoaXMtPmRpc3BsYXlfZXJyb3IoYXJyYXkoJ0Vycm9yIE51bWJlcjogJy4kZXJyb3JbJ2NvZGUnXSwgJGVycm9yWydtZXNzYWdlJ10sICRzcWwpKTsKQEAgLTkxNyw3ICs5MjQsNyBAQAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBpc193cml0ZV90eXBlKCRzcWwpCiAJewotCQlyZXR1cm4gKGJvb2wpIHByZWdfbWF0Y2goJy9eXHMqIj8oU0VUfElOU0VSVHxVUERBVEV8REVMRVRFfFJFUExBQ0V8Q1JFQVRFfERST1B8VFJVTkNBVEV8TE9BRHxDT1BZfEFMVEVSfFJFTkFNRXxHUkFOVHxSRVZPS0V8TE9DS3xVTkxPQ0t8UkVJTkRFWClccysvaScsICRzcWwpOworCQlyZXR1cm4gKGJvb2wpIHByZWdfbWF0Y2goJy9eXHMqIj8oU0VUfElOU0VSVHxVUERBVEV8REVMRVRFfFJFUExBQ0V8Q1JFQVRFfERST1B8VFJVTkNBVEV8TE9BRHxDT1BZfEFMVEVSfFJFTkFNRXxHUkFOVHxSRVZPS0V8TE9DS3xVTkxPQ0t8UkVJTkRFWClccy9pJywgJHNxbCk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMzUsNyArMTE0Miw3IEBACiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJLyogV2UgaGF2ZSBubyBvdGhlciBjaG9pY2UgYnV0IHRvIGp1c3QgZ2V0IHRoZSBmaXJzdCBlbGVtZW50J3Mga2V5LgotCQkJCQkgKiBEdWUgdG8gYXJyYXlfc2hpZnQoKSBhY2NlcHRpbmcgaXQncyBhcmd1bWVudCBieSByZWZlcmVuY2UsIGlmCisJCQkJCSAqIER1ZSB0byBhcnJheV9zaGlmdCgpIGFjY2VwdGluZyBpdHMgYXJndW1lbnQgYnkgcmVmZXJlbmNlLCBpZgogCQkJCQkgKiBFX1NUUklDVCBpcyBvbiwgdGhpcyB3b3VsZCB0cmlnZ2VyIGEgd2FybmluZy4gU28gd2UnbGwgaGF2ZSB0bwogCQkJCQkgKiBhc3NpZ24gaXQgZmlyc3QuCiAJCQkJCSAqLwpAQCAtMTM3NSw3ICsxMzgyLDkgQEAKIAkJCSRmaWVsZHNbJHRoaXMtPnByb3RlY3RfaWRlbnRpZmllcnMoJGtleSldID0gJHRoaXMtPmVzY2FwZSgkdmFsKTsKIAkJfQogCi0JCXJldHVybiAkdGhpcy0+X3VwZGF0ZSgkdGhpcy0+cHJvdGVjdF9pZGVudGlmaWVycygkdGFibGUsIFRSVUUsIE5VTEwsIEZBTFNFKSwgJGZpZWxkcyk7CisJCSRzcWwgPSAkdGhpcy0+X3VwZGF0ZSgkdGhpcy0+cHJvdGVjdF9pZGVudGlmaWVycygkdGFibGUsIFRSVUUsIE5VTEwsIEZBTFNFKSwgJGZpZWxkcyk7CisJCSR0aGlzLT5fcmVzZXRfd3JpdGUoKTsKKwkJcmV0dXJuICRzcWw7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0MTIsNyArMTQyMSw3IEBACiAJICovCiAJcHJvdGVjdGVkIGZ1bmN0aW9uIF9oYXNfb3BlcmF0b3IoJHN0cikKIAl7Ci0JCXJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnLyg8fD58IXw9fFxzSVMgTlVMTHxcc0lTIE5PVCBOVUxMfFxzQkVUV0VFTnxcc0xJS0V8XHNJTlxzKlwofFxzKS9pJywgdHJpbSgkc3RyKSk7CisJCXJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnLyg8fD58IXw9fFxzSVMgTlVMTHxcc0lTIE5PVCBOVUxMfFxzRVhJU1RTfFxzQkVUV0VFTnxcc0xJS0V8XHNJTlxzKlwofFxzKS9pJywgdHJpbSgkc3RyKSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0MzgsNiArMTQ0Nyw4IEBACiAJCQkJJ1xzKj5ccyonLAkJCS8vID4KIAkJCQknXHMrSVMgTlVMTCcsCQkJLy8gSVMgTlVMTAogCQkJCSdccytJUyBOT1QgTlVMTCcsCQkvLyBJUyBOT1QgTlVMTAorCQkJCSdccytFWElTVFNccypcKFteXCldK1wpJywJLy8gRVhJU1RTKHNxbCkKKwkJCQknXHMrTk9UIEVYSVNUU1xzKlwoW15cKV0rXCknLAkvLyBOT1QgRVhJU1RTKHNxbCkKIAkJCQknXHMrQkVUV0VFTlxzK1xTK1xzK0FORFxzK1xTKycsCS8vIEJFVFdFRU4gdmFsdWUgQU5EIHZhbHVlCiAJCQkJJ1xzK0lOXHMqXChbXlwpXStcKScsCQkvLyBJTihsaXN0KQogCQkJCSdccytOT1QgSU5ccypcKFteXCldK1wpJywJLy8gTk9UIElOIChsaXN0KQpAQCAtMTQ3NCw3ICsxNDg1LDcgQEAKIAkJfQogCiAJCXJldHVybiAoZnVuY19udW1fYXJncygpID4gMSkKLQkJCT8gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGZ1bmN0aW9uLCBhcnJheV9zcGxpY2UoZnVuY19nZXRfYXJncygpLCAxKSkKKwkJCT8gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGZ1bmN0aW9uLCBhcnJheV9zbGljZShmdW5jX2dldF9hcmdzKCksIDEpKQogCQkJOiBjYWxsX3VzZXJfZnVuYygkZnVuY3Rpb24pOwogCX0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL0RCX2ZvcmdlLnBocCBiL3N5c3RlbS9kYXRhYmFzZS9EQl9mb3JnZS5waHAKaW5kZXggZDUyMDI5ZS4uMWNlYmIxOCAxMDA2NDQKLS0tIGEvc3lzdGVtL2RhdGFiYXNlL0RCX2ZvcmdlLnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvREJfZm9yZ2UucGhwCkBAIC03NDAsNiArNzQwLDE4IEBACiAJCQkJCSdfbGl0ZXJhbCcJCT0+IEZBTFNFCiAJCQkpOwogCisJCQlpZiAoJGNyZWF0ZV90YWJsZSA9PT0gRkFMU0UpCisJCQl7CisJCQkJaWYgKGlzc2V0KCRhdHRyaWJ1dGVzWydBRlRFUiddKSkKKwkJCQl7CisJCQkJCSRmaWVsZFsnYWZ0ZXInXSA9ICRhdHRyaWJ1dGVzWydBRlRFUiddOworCQkJCX0KKwkJCQllbHNlaWYgKGlzc2V0KCRhdHRyaWJ1dGVzWydGSVJTVCddKSkKKwkJCQl7CisJCQkJCSRmaWVsZFsnZmlyc3QnXSA9IChib29sKSAkYXR0cmlidXRlc1snRklSU1QnXTsKKwkJCQl9CisJCQl9CisKIAkJCSR0aGlzLT5fYXR0cl9kZWZhdWx0KCRhdHRyaWJ1dGVzLCAkZmllbGQpOwogCiAJCQlpZiAoaXNzZXQoJGF0dHJpYnV0ZXNbJ05VTEwnXSkpCkBAIC03NDgsMTEgKzc2MCwxNSBAQAogCQkJCXsKIAkJCQkJJGZpZWxkWydudWxsJ10gPSBlbXB0eSgkdGhpcy0+X251bGwpID8gJycgOiAnICcuJHRoaXMtPl9udWxsOwogCQkJCX0KLQkJCQllbHNlaWYgKCRjcmVhdGVfdGFibGUgPT09IFRSVUUpCisJCQkJZWxzZQogCQkJCXsKIAkJCQkJJGZpZWxkWydudWxsJ10gPSAnIE5PVCBOVUxMJzsKIAkJCQl9CiAJCQl9CisJCQllbHNlaWYgKCRjcmVhdGVfdGFibGUgPT09IFRSVUUpCisJCQl7CisJCQkJJGZpZWxkWydudWxsJ10gPSAnIE5PVCBOVUxMJzsKKwkJCX0KIAogCQkJJHRoaXMtPl9hdHRyX2F1dG9faW5jcmVtZW50KCRhdHRyaWJ1dGVzLCAkZmllbGQpOwogCQkJJHRoaXMtPl9hdHRyX3VuaXF1ZSgkYXR0cmlidXRlcywgJGZpZWxkKTsKQEAgLTk2OCw3ICs5ODQsNiBAQAogCSAqLwogCXByb3RlY3RlZCBmdW5jdGlvbiBfcHJvY2Vzc19pbmRleGVzKCR0YWJsZSkKIAl7Ci0JCSR0YWJsZSA9ICR0aGlzLT5kYi0+ZXNjYXBlX2lkZW50aWZpZXJzKCR0YWJsZSk7CiAJCSRzcWxzID0gYXJyYXkoKTsKIAogCQlmb3IgKCRpID0gMCwgJGMgPSBjb3VudCgkdGhpcy0+a2V5cyk7ICRpIDwgJGM7ICRpKyspCkBAIC05OTIsNyArMTAwNyw3IEBACiAKIAkJCWlzX2FycmF5KCR0aGlzLT5rZXlzWyRpXSkgT1IgJHRoaXMtPmtleXNbJGldID0gYXJyYXkoJHRoaXMtPmtleXNbJGldKTsKIAotCQkJJHNxbHNbXSA9ICdDUkVBVEUgSU5ERVggJy4kdGhpcy0+ZGItPmVzY2FwZV9pZGVudGlmaWVycyhpbXBsb2RlKCdfJywgJHRoaXMtPmtleXNbJGldKSkKKwkJCSRzcWxzW10gPSAnQ1JFQVRFIElOREVYICcuJHRoaXMtPmRiLT5lc2NhcGVfaWRlbnRpZmllcnMoJHRhYmxlLidfJy5pbXBsb2RlKCdfJywgJHRoaXMtPmtleXNbJGldKSkKIAkJCQkuJyBPTiAnLiR0aGlzLT5kYi0+ZXNjYXBlX2lkZW50aWZpZXJzKCR0YWJsZSkKIAkJCQkuJyAoJy5pbXBsb2RlKCcsICcsICR0aGlzLT5kYi0+ZXNjYXBlX2lkZW50aWZpZXJzKCR0aGlzLT5rZXlzWyRpXSkpLicpOyc7CiAJCX0KZGlmZiAtLWdpdCBhL3N5c3RlbS9kYXRhYmFzZS9EQl9xdWVyeV9idWlsZGVyLnBocCBiL3N5c3RlbS9kYXRhYmFzZS9EQl9xdWVyeV9idWlsZGVyLnBocAppbmRleCAyOTI2MjFiLi5jNTQzZTE1IDEwMDY0NAotLS0gYS9zeXN0ZW0vZGF0YWJhc2UvREJfcXVlcnlfYnVpbGRlci5waHAKKysrIGIvc3lzdGVtL2RhdGFiYXNlL0RCX3F1ZXJ5X2J1aWxkZXIucGhwCkBAIC0zODUsNyArMzg1LDcgQEAKIAkJCSRhbGlhcyA9ICR0aGlzLT5fY3JlYXRlX2FsaWFzX2Zyb21fdGFibGUodHJpbSgkc2VsZWN0KSk7CiAJCX0KIAotCQkkc3FsID0gJHRoaXMtPnByb3RlY3RfaWRlbnRpZmllcnMoJHR5cGUuJygnLnRyaW0oJHNlbGVjdCkuJyknKS4nIEFTICcuJHRoaXMtPmVzY2FwZV9pZGVudGlmaWVycyh0cmltKCRhbGlhcykpOworCQkkc3FsID0gJHR5cGUuJygnLiR0aGlzLT5wcm90ZWN0X2lkZW50aWZpZXJzKHRyaW0oJHNlbGVjdCkpLicpIEFTICcuJHRoaXMtPmVzY2FwZV9pZGVudGlmaWVycyh0cmltKCRhbGlhcykpOwogCiAJCSR0aGlzLT5xYl9zZWxlY3RbXSA9ICRzcWw7CiAJCSR0aGlzLT5xYl9ub19lc2NhcGVbXSA9IE5VTEw7CkBAIC0xMTM4LDcgKzExMzgsNyBAQAogCSAqIE9SREVSIEJZCiAJICoKIAkgKiBAcGFyYW0Jc3RyaW5nCSRvcmRlcmJ5Ci0JICogQHBhcmFtCXN0cmluZwkkZGlyZWN0aW9uCUFTQyBvciBERVNDCisJICogQHBhcmFtCXN0cmluZwkkZGlyZWN0aW9uCUFTQywgREVTQyBvciBSQU5ET00KIAkgKiBAcGFyYW0JYm9vbAkkZXNjYXBlCiAJICogQHJldHVybglDSV9EQl9xdWVyeV9idWlsZGVyCiAJICovCkBAIC0xMTUyLDcgKzExNTIsNyBAQAogCiAJCQkvLyBEbyB3ZSBoYXZlIGEgc2VlZCB2YWx1ZT8KIAkJCSRvcmRlcmJ5ID0gY3R5cGVfZGlnaXQoKHN0cmluZykgJG9yZGVyYnkpCi0JCQkJPyAkb3JkZXJieSA9IHNwcmludGYoJHRoaXMtPl9yYW5kb21fa2V5d29yZFsxXSwgJG9yZGVyYnkpCisJCQkJPyBzcHJpbnRmKCR0aGlzLT5fcmFuZG9tX2tleXdvcmRbMV0sICRvcmRlcmJ5KQogCQkJCTogJHRoaXMtPl9yYW5kb21fa2V5d29yZFswXTsKIAkJfQogCQllbHNlaWYgKGVtcHR5KCRvcmRlcmJ5KSkKQEAgLTEzMzgsNyArMTMzOCw3IEBACiAJICogcmV0dXJuZWQgYnkgYW4gUXVlcnkgQnVpbGRlciBxdWVyeS4KIAkgKgogCSAqIEBwYXJhbQlzdHJpbmcKLQkgKiBAcmV0dXJuCXN0cmluZworCSAqIEByZXR1cm4JaW50CiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGNvdW50X2FsbF9yZXN1bHRzKCR0YWJsZSA9ICcnKQogCXsKQEAgLTE4NDYsNiArMTg0Niw3IEBACiAJCXsKIAkJCSR0aGlzLT5xdWVyeSgkdGhpcy0+X3VwZGF0ZV9iYXRjaCgkdGhpcy0+cHJvdGVjdF9pZGVudGlmaWVycygkdGFibGUsIFRSVUUsIE5VTEwsIEZBTFNFKSwgYXJyYXlfc2xpY2UoJHRoaXMtPnFiX3NldCwgJGksIDEwMCksICR0aGlzLT5wcm90ZWN0X2lkZW50aWZpZXJzKCRpbmRleCkpKTsKIAkJCSRhZmZlY3RlZF9yb3dzICs9ICR0aGlzLT5hZmZlY3RlZF9yb3dzKCk7CisJCQkkdGhpcy0+cWJfd2hlcmUgPSBhcnJheSgpOwogCQl9CiAKIAkJJHRoaXMtPl9yZXNldF93cml0ZSgpOwpAQCAtMjI5MCw3ICsyMjkxLDEyIEBACiAJCXsKIAkJCWZvciAoJGkgPSAwLCAkYyA9IGNvdW50KCR0aGlzLT4kcWJfa2V5KTsgJGkgPCAkYzsgJGkrKykKIAkJCXsKLQkJCQlpZiAoJHRoaXMtPnskcWJfa2V5fVskaV1bJ2VzY2FwZSddID09PSBGQUxTRSkKKwkJCQkvLyBJcyB0aGlzIGNvbmRpdGlvbiBhbHJlYWR5IGNvbXBpbGVkPworCQkJCWlmIChpc19zdHJpbmcoJHRoaXMtPnskcWJfa2V5fVskaV0pKQorCQkJCXsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWVsc2VpZiAoJHRoaXMtPnskcWJfa2V5fVskaV1bJ2VzY2FwZSddID09PSBGQUxTRSkKIAkJCQl7CiAJCQkJCSR0aGlzLT57JHFiX2tleX1bJGldID0gJHRoaXMtPnskcWJfa2V5fVskaV1bJ2NvbmRpdGlvbiddOwogCQkJCQljb250aW51ZTsKQEAgLTIzNjAsNiArMjM2NiwxMiBAQAogCQl7CiAJCQlmb3IgKCRpID0gMCwgJGMgPSBjb3VudCgkdGhpcy0+cWJfZ3JvdXBieSk7ICRpIDwgJGM7ICRpKyspCiAJCQl7CisJCQkJLy8gSXMgaXQgYWxyZWFkeSBjb21waWxlZD8KKwkJCQlpZiAoaXNfc3RyaW5nKCR0aGlzLT5xYl9ncm91cGJ5KSkKKwkJCQl7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwogCQkJCSR0aGlzLT5xYl9ncm91cGJ5WyRpXSA9ICgkdGhpcy0+cWJfZ3JvdXBieVskaV1bJ2VzY2FwZSddID09PSBGQUxTRSBPUiAkdGhpcy0+X2lzX2xpdGVyYWwoJHRoaXMtPnFiX2dyb3VwYnlbJGldWydmaWVsZCddKSkKIAkJCQkJPyAkdGhpcy0+cWJfZ3JvdXBieVskaV1bJ2ZpZWxkJ10KIAkJCQkJOiAkdGhpcy0+cHJvdGVjdF9pZGVudGlmaWVycygkdGhpcy0+cWJfZ3JvdXBieVskaV1bJ2ZpZWxkJ10pOwpAQCAtMjU0NCwxNyArMjU1NiwzNCBAQAogCQl7CiAJCQlyZXR1cm47CiAJCX0KKwkJZWxzZWlmIChpbl9hcnJheSgnc2VsZWN0JywgJHRoaXMtPnFiX2NhY2hlX2V4aXN0cywgVFJVRSkpCisJCXsKKwkJCSRxYl9ub19lc2NhcGUgPSAkdGhpcy0+cWJfY2FjaGVfbm9fZXNjYXBlOworCQl9CiAKLQkJZm9yZWFjaCAoJHRoaXMtPnFiX2NhY2hlX2V4aXN0cyBhcyAkdmFsKQorCQlmb3JlYWNoIChhcnJheV91bmlxdWUoJHRoaXMtPnFiX2NhY2hlX2V4aXN0cykgYXMgJHZhbCkgLy8gc2VsZWN0LCBmcm9tLCBldGMuCiAJCXsKIAkJCSRxYl92YXJpYWJsZQk9ICdxYl8nLiR2YWw7CiAJCQkkcWJfY2FjaGVfdmFyCT0gJ3FiX2NhY2hlXycuJHZhbDsKKwkJCSRxYl9uZXcgCT0gJHRoaXMtPiRxYl9jYWNoZV92YXI7CiAKLQkJCWlmIChjb3VudCgkdGhpcy0+JHFiX2NhY2hlX3ZhcikgPT09IDApCisJCQlmb3IgKCRpID0gMCwgJGMgPSBjb3VudCgkdGhpcy0+JHFiX3ZhcmlhYmxlKTsgJGkgPCAkYzsgJGkrKykKIAkJCXsKLQkJCQljb250aW51ZTsKKwkJCQlpZiAoICEgaW5fYXJyYXkoJHRoaXMtPnskcWJfdmFyaWFibGV9WyRpXSwgJHFiX25ldywgVFJVRSkpCisJCQkJeworCQkJCQkkcWJfbmV3W10gPSAkdGhpcy0+eyRxYl92YXJpYWJsZX1bJGldOworCQkJCQlpZiAoJHZhbCA9PT0gJ3NlbGVjdCcpCisJCQkJCXsKKwkJCQkJCSRxYl9ub19lc2NhcGVbXSA9ICR0aGlzLT5xYl9ub19lc2NhcGVbJGldOworCQkJCQl9CisJCQkJfQogCQkJfQotCQkJJHRoaXMtPiRxYl92YXJpYWJsZSA9IGFycmF5X21lcmdlKCR0aGlzLT4kcWJfdmFyaWFibGUsIGFycmF5X2RpZmYoJHRoaXMtPiRxYl9jYWNoZV92YXIsICR0aGlzLT4kcWJfdmFyaWFibGUpKTsKKworCQkJJHRoaXMtPiRxYl92YXJpYWJsZSA9ICRxYl9uZXc7CisJCQlpZiAoJHZhbCA9PT0gJ3NlbGVjdCcpCisJCQl7CisJCQkJJHRoaXMtPnFiX25vX2VzY2FwZSA9ICRxYl9ub19lc2NhcGU7CisJCQl9CiAJCX0KIAogCQkvLyBJZiB3ZSBhcmUgInByb3RlY3RpbmcgaWRlbnRpZmllcnMiIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgImZyb20iCkBAIC0yNTYzLDggKzI1OTIsNiBAQAogCQl7CiAJCQkkdGhpcy0+X3RyYWNrX2FsaWFzZXMoJHRoaXMtPnFiX2Zyb20pOwogCQl9Ci0KLQkJJHRoaXMtPnFiX25vX2VzY2FwZSA9IGFycmF5X21lcmdlKCR0aGlzLT5xYl9ub19lc2NhcGUsIGFycmF5X2RpZmYoJHRoaXMtPnFiX2NhY2hlX25vX2VzY2FwZSwgJHRoaXMtPnFiX25vX2VzY2FwZSkpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zeXN0ZW0vZGF0YWJhc2UvREJfdXRpbGl0eS5waHAgYi9zeXN0ZW0vZGF0YWJhc2UvREJfdXRpbGl0eS5waHAKaW5kZXggOWY5NTNkNC4uNjY1NjE1OSAxMDA2NDQKLS0tIGEvc3lzdGVtL2RhdGFiYXNlL0RCX3V0aWxpdHkucGhwCisrKyBiL3N5c3RlbS9kYXRhYmFzZS9EQl91dGlsaXR5LnBocApAQCAtMjgyLDggKzI4Miw3IEBACiAJCWV4dHJhY3QoJHBhcmFtcyk7CiAKIAkJLy8gTG9hZCB0aGUgeG1sIGhlbHBlcgotCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7Ci0JCSRDSS0+bG9hZC0+aGVscGVyKCd4bWwnKTsKKwkJZ2V0X2luc3RhbmNlKCktPmxvYWQtPmhlbHBlcigneG1sJyk7CiAKIAkJLy8gR2VuZXJhdGUgdGhlIHJlc3VsdAogCQkkeG1sID0gJzwnLiRyb290Lic+Jy4kbmV3bGluZTsKZGlmZiAtLWdpdCBhL3N5c3RlbS9kYXRhYmFzZS9kcml2ZXJzL215c3FsL215c3FsX2RyaXZlci5waHAgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9teXNxbC9teXNxbF9kcml2ZXIucGhwCmluZGV4IGI5NDY0MmIuLjE2YjJmNmYgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9kYXRhYmFzZS9kcml2ZXJzL215c3FsL215c3FsX2RyaXZlci5waHAKKysrIGIvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvbXlzcWwvbXlzcWxfZHJpdmVyLnBocApAQCAtNjYsNiArNjYsMTUgQEAKIAkgKi8KIAlwdWJsaWMgJGRlbGV0ZV9oYWNrID0gVFJVRTsKIAorCS8qKgorCSAqIFN0cmljdCBPTiBmbGFnCisJICoKKwkgKiBXaGV0aGVyIHdlJ3JlIHJ1bm5pbmcgaW4gc3RyaWN0IFNRTCBtb2RlLgorCSAqCisJICogQHZhcglib29sCisJICovCisJcHVibGljICRzdHJpY3RvbiA9IEZBTFNFOworCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCS8qKgpAQCAtMTI2LDYgKzEzNSwxMSBAQAogCQkJCTogRkFMU0U7CiAJCX0KIAorCQlpZiAoJHRoaXMtPnN0cmljdG9uICYmIGlzX3Jlc291cmNlKCR0aGlzLT5jb25uX2lkKSkKKwkJeworCQkJJHRoaXMtPnNpbXBsZV9xdWVyeSgnU0VUIFNFU1NJT04gc3FsX21vZGU9IlNUUklDVF9BTExfVEFCTEVTIicpOworCQl9CisKIAkJcmV0dXJuICR0aGlzLT5jb25uX2lkOwogCX0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvbXlzcWxpL215c3FsaV9kcml2ZXIucGhwIGIvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvbXlzcWxpL215c3FsaV9kcml2ZXIucGhwCmluZGV4IGVmMmNiOGEuLjYyYmEyYzUgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9kYXRhYmFzZS9kcml2ZXJzL215c3FsaS9teXNxbGlfZHJpdmVyLnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9teXNxbGkvbXlzcWxpX2RyaXZlci5waHAKQEAgLTY2LDYgKzY2LDE1IEBACiAJICovCiAJcHVibGljICRkZWxldGVfaGFjayA9IFRSVUU7CiAKKwkvKioKKwkgKiBTdHJpY3QgT04gZmxhZworCSAqCisJICogV2hldGhlciB3ZSdyZSBydW5uaW5nIGluIHN0cmljdCBTUUwgbW9kZS4KKwkgKgorCSAqIEB2YXIJYm9vbAorCSAqLworCXB1YmxpYyAkc3RyaWN0b24gPSBGQUxTRTsKKwogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkvKioKQEAgLTkzLDYgKzEwMiwxMSBAQAogCQkkY2xpZW50X2ZsYWdzID0gKCR0aGlzLT5jb21wcmVzcyA9PT0gVFJVRSkgPyBNWVNRTElfQ0xJRU5UX0NPTVBSRVNTIDogMDsKIAkJJG15c3FsaSA9IG15c3FsaV9pbml0KCk7CiAKKwkJaWYgKCR0aGlzLT5zdHJpY3RvbikKKwkJeworCQkJJG15c3FsaS0+b3B0aW9ucyhNWVNRTElfSU5JVF9DT01NQU5ELCAnU0VUIFNFU1NJT04gc3FsX21vZGU9IlNUUklDVF9BTExfVEFCTEVTIicpOworCQl9CisKIAkJcmV0dXJuIEAkbXlzcWxpLT5yZWFsX2Nvbm5lY3QoJGhvc3RuYW1lLCAkdGhpcy0+dXNlcm5hbWUsICR0aGlzLT5wYXNzd29yZCwgJHRoaXMtPmRhdGFiYXNlLCAkcG9ydCwgTlVMTCwgJGNsaWVudF9mbGFncykKIAkJCT8gJG15c3FsaSA6IEZBTFNFOwogCX0KQEAgLTI0MSw5ICsyNTUsMTAgQEAKIAkJLy8gZXZlbiBpZiB0aGUgcXVlcmllcyBwcm9kdWNlIGEgc3VjY2Vzc2Z1bCByZXN1bHQuCiAJCSR0aGlzLT5fdHJhbnNfZmFpbHVyZSA9ICgkdGVzdF9tb2RlID09PSBUUlVFKTsKIAotCQkkdGhpcy0+c2ltcGxlX3F1ZXJ5KCdTRVQgQVVUT0NPTU1JVD0wJyk7Ci0JCSR0aGlzLT5zaW1wbGVfcXVlcnkoJ1NUQVJUIFRSQU5TQUNUSU9OJyk7IC8vIGNhbiBhbHNvIGJlIEJFR0lOIG9yIEJFR0lOIFdPUksKLQkJcmV0dXJuIFRSVUU7CisJCSR0aGlzLT5jb25uX2lkLT5hdXRvY29tbWl0KEZBTFNFKTsKKwkJcmV0dXJuIGlzX3BocCgnNS41JykKKwkJCT8gJHRoaXMtPmNvbm5faWQtPmJlZ2luX3RyYW5zYWN0aW9uKCkKKwkJCTogJHRoaXMtPnNpbXBsZV9xdWVyeSgnU1RBUlQgVFJBTlNBQ1RJT04nKTsgLy8gY2FuIGFsc28gYmUgQkVHSU4gb3IgQkVHSU4gV09SSwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNjEsOSArMjc2LDEzIEBACiAJCQlyZXR1cm4gVFJVRTsKIAkJfQogCi0JCSR0aGlzLT5zaW1wbGVfcXVlcnkoJ0NPTU1JVCcpOwotCQkkdGhpcy0+c2ltcGxlX3F1ZXJ5KCdTRVQgQVVUT0NPTU1JVD0xJyk7Ci0JCXJldHVybiBUUlVFOworCQlpZiAoJHRoaXMtPmNvbm5faWQtPmNvbW1pdCgpKQorCQl7CisJCQkkdGhpcy0+Y29ubl9pZC0+YXV0b2NvbW1pdChUUlVFKTsKKwkJCXJldHVybiBUUlVFOworCQl9CisKKwkJcmV0dXJuIEZBTFNFOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yODEsOSArMzAwLDEzIEBACiAJCQlyZXR1cm4gVFJVRTsKIAkJfQogCi0JCSR0aGlzLT5zaW1wbGVfcXVlcnkoJ1JPTExCQUNLJyk7Ci0JCSR0aGlzLT5zaW1wbGVfcXVlcnkoJ1NFVCBBVVRPQ09NTUlUPTEnKTsKLQkJcmV0dXJuIFRSVUU7CisJCWlmICgkdGhpcy0+Y29ubl9pZC0+cm9sbGJhY2soKSkKKwkJeworCQkJJHRoaXMtPmNvbm5faWQtPmF1dG9jb21taXQoVFJVRSk7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCisJCXJldHVybiBGQUxTRTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvb2NpOC9vY2k4X2RyaXZlci5waHAgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9vY2k4L29jaThfZHJpdmVyLnBocAppbmRleCA5M2U2MmI0Li5kNzVlZDI4IDEwMDY0NAotLS0gYS9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9vY2k4L29jaThfZHJpdmVyLnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9vY2k4L29jaThfZHJpdmVyLnBocApAQCAtMTgsNyArMTgsNyBAQAogICoKICAqIEBwYWNrYWdlCQlDb2RlSWduaXRlcgogICogQGF1dGhvcgkJRWxsaXNMYWIgRGV2IFRlYW0KLSAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDEzLCBFbGxpc0xhYiwgSW5jLiAoaHR0cDovL2VsbGlzbGFiLmNvbS8pCisgKiBAY29weXJpZ2h0CUNvcHlyaWdodCAoYykgMjAwOCAtIDIwMTMsIEVsbGlzTGFiLCBJbmMuIChodHRwOi8vZWxsaXNsYWIuY29tLykKICAqIEBsaWNlbnNlCQlodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApCiAgKiBAbGluawkJaHR0cDovL2NvZGVpZ25pdGVyLmNvbQogICogQHNpbmNlCQlWZXJzaW9uIDEuMApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJCQkJJGhhdmVfY3Vyc29yID0gVFJVRTsKIAkJCX0KIAkJfQotCQkkc3FsID0gdHJpbSgkc3FsLCAnLCcpIC4gJyk7IEVORDsnOworCQkkc3FsID0gdHJpbSgkc3FsLCAnLCcpLicpOyBFTkQ7JzsKIAogCQkkdGhpcy0+c3RtdF9pZCA9IEZBTFNFOwogCQkkdGhpcy0+X3NldF9zdG10X2lkKCRzcWwpOwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvb2NpOC9vY2k4X3Jlc3VsdC5waHAgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9vY2k4L29jaThfcmVzdWx0LnBocAppbmRleCBmZDFkMjg3Li5jZTA5YjYyIDEwMDY0NAotLS0gYS9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9vY2k4L29jaThfcmVzdWx0LnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9vY2k4L29jaThfcmVzdWx0LnBocApAQCAtMTgsNyArMTgsNyBAQAogICoKICAqIEBwYWNrYWdlCQlDb2RlSWduaXRlcgogICogQGF1dGhvcgkJRWxsaXNMYWIgRGV2IFRlYW0KLSAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDEzLCBFbGxpc0xhYiwgSW5jLiAoaHR0cDovL2VsbGlzbGFiLmNvbS8pCisgKiBAY29weXJpZ2h0CUNvcHlyaWdodCAoYykgMjAwOCAtIDIwMTMsIEVsbGlzTGFiLCBJbmMuIChodHRwOi8vZWxsaXNsYWIuY29tLykKICAqIEBsaWNlbnNlCQlodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApCiAgKiBAbGluawkJaHR0cDovL2NvZGVpZ25pdGVyLmNvbQogICogQHNpbmNlCQlWZXJzaW9uIDEuMApkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvcGRvL3Bkb19kcml2ZXIucGhwIGIvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvcGRvL3Bkb19kcml2ZXIucGhwCmluZGV4IGZhODk2NjEuLjE4NGE4ZGYgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9kYXRhYmFzZS9kcml2ZXJzL3Bkby9wZG9fZHJpdmVyLnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9wZG8vcGRvX2RyaXZlci5waHAKQEAgLTY5LDcgKzY5LDcgQEAKIAl7CiAJCXBhcmVudDo6X19jb25zdHJ1Y3QoJHBhcmFtcyk7CiAKLQkJaWYgKHByZWdfbWF0Y2goJy8oW147XSspOi8nLCAkdGhpcy0+ZHNuLCAkbWF0Y2gpICYmIGNvdW50KCRtYXRjaCkgPT09IDIpCisJCWlmIChwcmVnX21hdGNoKCcvKFteOl0rKTovJywgJHRoaXMtPmRzbiwgJG1hdGNoKSAmJiBjb3VudCgkbWF0Y2gpID09PSAyKQogCQl7CiAJCQkvLyBJZiB0aGVyZSBpcyBhIG1pbmltdW0gdmFsaWQgZHNuIHN0cmluZyBwYXR0ZXJuIGZvdW5kLCB3ZSdyZSBkb25lCiAJCQkvLyBUaGlzIGlzIGZvciBnZW5lcmFsIFBETyB1c2Vycywgd2hvIHRlbmQgdG8gaGF2ZSBhIGZ1bGwgRFNOIHN0cmluZy4KQEAgLTc3LDcgKzc3LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQkvLyBMZWdhY3kgc3VwcG9ydCBmb3IgRFNOIHNwZWNpZmllZCBpbiB0aGUgaG9zdG5hbWUgZmllbGQKLQkJZWxzZWlmIChwcmVnX21hdGNoKCcvKFteO10rKTovJywgJHRoaXMtPmhvc3RuYW1lLCAkbWF0Y2gpICYmIGNvdW50KCRtYXRjaCkgPT09IDIpCisJCWVsc2VpZiAocHJlZ19tYXRjaCgnLyhbXjpdKyk6LycsICR0aGlzLT5ob3N0bmFtZSwgJG1hdGNoKSAmJiBjb3VudCgkbWF0Y2gpID09PSAyKQogCQl7CiAJCQkkdGhpcy0+ZHNuID0gJHRoaXMtPmhvc3RuYW1lOwogCQkJJHRoaXMtPmhvc3RuYW1lID0gTlVMTDsKZGlmZiAtLWdpdCBhL3N5c3RlbS9kYXRhYmFzZS9kcml2ZXJzL3Bkby9zdWJkcml2ZXJzL3Bkb19teXNxbF9kcml2ZXIucGhwIGIvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvcGRvL3N1YmRyaXZlcnMvcGRvX215c3FsX2RyaXZlci5waHAKaW5kZXggZmY0ODZmYy4uYmM5MmNhYiAxMDA2NDQKLS0tIGEvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvcGRvL3N1YmRyaXZlcnMvcGRvX215c3FsX2RyaXZlci5waHAKKysrIGIvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvcGRvL3N1YmRyaXZlcnMvcGRvX215c3FsX2RyaXZlci5waHAKQEAgLTU1LDYgKzU1LDE1IEBACiAJICovCiAJcHVibGljICRjb21wcmVzcyA9IEZBTFNFOwogCisJLyoqCisJICogU3RyaWN0IE9OIGZsYWcKKwkgKgorCSAqIFdoZXRoZXIgd2UncmUgcnVubmluZyBpbiBzdHJpY3QgU1FMIG1vZGUuCisJICoKKwkgKiBAdmFyCWJvb2wKKwkgKi8KKwlwdWJsaWMgJHN0cmljdG9uID0gRkFMU0U7CisKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJLyoqCkBAIC0xMTQsNiArMTIzLDE4IEBACiAJCQkJLihlbXB0eSgkdGhpcy0+ZGJjb2xsYXQpID8gJycgOiAnIENPTExBVEUgJy4kdGhpcy0+ZGJjb2xsYXQpOwogCQl9CiAKKwkJaWYgKCR0aGlzLT5zdHJpY3RvbikKKwkJeworCQkJaWYgKGVtcHR5KCR0aGlzLT5vcHRpb25zW1BETzo6TVlTUUxfQVRUUl9JTklUX0NPTU1BTkRdKSkKKwkJCXsKKwkJCQkkdGhpcy0+b3B0aW9uc1tQRE86Ok1ZU1FMX0FUVFJfSU5JVF9DT01NQU5EXSA9ICdTRVQgU0VTU0lPTiBzcWxfbW9kZT0iU1RSSUNUX0FMTF9UQUJMRVMiJzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkdGhpcy0+b3B0aW9uc1tQRE86Ok1ZU1FMX0FUVFJfSU5JVF9DT01NQU5EXSAuPSAnLCBAQHNlc3Npb24uc3FsX21vZGUgPSAiU1RSSUNUX0FMTF9UQUJMRVMiJzsKKwkJCX0KKwkJfQorCiAJCWlmICgkdGhpcy0+Y29tcHJlc3MgPT09IFRSVUUpCiAJCXsKIAkJCSR0aGlzLT5vcHRpb25zW1BETzo6TVlTUUxfQVRUUl9DT01QUkVTU10gPSBUUlVFOwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvcGRvL3N1YmRyaXZlcnMvcGRvX3Bnc3FsX2RyaXZlci5waHAgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9wZG8vc3ViZHJpdmVycy9wZG9fcGdzcWxfZHJpdmVyLnBocAppbmRleCBkMGNkZGUyLi42ZWUzMjdiIDEwMDY0NAotLS0gYS9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9wZG8vc3ViZHJpdmVycy9wZG9fcGdzcWxfZHJpdmVyLnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9wZG8vc3ViZHJpdmVycy9wZG9fcGdzcWxfZHJpdmVyLnBocApAQCAtMTM3LDcgKzEzNyw3IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGlzX3dyaXRlX3R5cGUoJHNxbCkKIAl7Ci0JCXJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnL15ccyoiPyhTRVR8SU5TRVJUKD8hW15cKV0rXClccytSRVRVUk5JTkcpfFVQREFURXxERUxFVEV8UkVQTEFDRXxDUkVBVEV8RFJPUHxUUlVOQ0FURXxMT0FEfENPUFl8QUxURVJ8UkVOQU1FfEdSQU5UfFJFVk9LRXxMT0NLfFVOTE9DS3xSRUlOREVYKVxzKy9pJywgJHNxbCk7CisJCXJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnL15ccyoiPyhTRVR8SU5TRVJUKD8hW15cKV0rXClccytSRVRVUk5JTkcpfFVQREFURSg/IS4qXHNSRVRVUk5JTkcpfERFTEVURXxDUkVBVEV8RFJPUHxUUlVOQ0FURXxMT0FEfENPUFl8QUxURVJ8UkVOQU1FfEdSQU5UfFJFVk9LRXxMT0NLfFVOTE9DS3xSRUlOREVYKVxzL2knLCBzdHJfcmVwbGFjZShhcnJheSgiXHJcbiIsICJcciIsICJcbiIpLCAnICcsICRzcWwpKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTY2LDcgKzE2Niw3IEBACiAJICogT1JERVIgQlkKIAkgKgogCSAqIEBwYXJhbQlzdHJpbmcJJG9yZGVyYnkKLQkgKiBAcGFyYW0Jc3RyaW5nCSRkaXJlY3Rpb24JQVNDIG9yIERFU0MKKwkgKiBAcGFyYW0Jc3RyaW5nCSRkaXJlY3Rpb24JQVNDLCBERVNDIG9yIFJBTkRPTQogCSAqIEBwYXJhbQlib29sCSRlc2NhcGUKIAkgKiBAcmV0dXJuCW9iamVjdAogCSAqLwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2RhdGFiYXNlL2RyaXZlcnMvcG9zdGdyZS9wb3N0Z3JlX2RyaXZlci5waHAgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9wb3N0Z3JlL3Bvc3RncmVfZHJpdmVyLnBocAppbmRleCBhYzczNDVhLi4xOTQwNGFlIDEwMDY0NAotLS0gYS9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9wb3N0Z3JlL3Bvc3RncmVfZHJpdmVyLnBocAorKysgYi9zeXN0ZW0vZGF0YWJhc2UvZHJpdmVycy9wb3N0Z3JlL3Bvc3RncmVfZHJpdmVyLnBocApAQCAtMzE4LDcgKzMxOCw3IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGlzX3dyaXRlX3R5cGUoJHNxbCkKIAl7Ci0JCXJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnL15ccyoiPyhTRVR8SU5TRVJUKD8hW15cKV0rXClccytSRVRVUk5JTkcpfFVQREFURXxERUxFVEV8UkVQTEFDRXxDUkVBVEV8RFJPUHxUUlVOQ0FURXxMT0FEfENPUFl8QUxURVJ8UkVOQU1FfEdSQU5UfFJFVk9LRXxMT0NLfFVOTE9DS3xSRUlOREVYKVxzKy9pJywgJHNxbCk7CisJCXJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnL15ccyoiPyhTRVR8SU5TRVJUKD8hW15cKV0rXClccytSRVRVUk5JTkcpfFVQREFURSg/IS4qXHNSRVRVUk5JTkcpfERFTEVURXxDUkVBVEV8RFJPUHxUUlVOQ0FURXxMT0FEfENPUFl8QUxURVJ8UkVOQU1FfEdSQU5UfFJFVk9LRXxMT0NLfFVOTE9DS3xSRUlOREVYKVxzL2knLCBzdHJfcmVwbGFjZShhcnJheSgiXHJcbiIsICJcciIsICJcbiIpLCAnICcsICRzcWwpKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzMxLDcgKzMzMSw3IEBACiAJICovCiAJcHJvdGVjdGVkIGZ1bmN0aW9uIF9lc2NhcGVfc3RyKCRzdHIpCiAJewotCQlyZXR1cm4gcGdfZXNjYXBlX3N0cmluZygkc3RyKTsKKwkJcmV0dXJuIHBnX2VzY2FwZV9zdHJpbmcoJHRoaXMtPmNvbm5faWQsICRzdHIpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNDYsNyArMzQ2LDExIEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGVzY2FwZSgkc3RyKQogCXsKLQkJaWYgKGlzX2Jvb2woJHN0cikpCisJCWlmIChpc19waHAoJzUuNC40JykgJiYgKGlzX3N0cmluZygkc3RyKSBPUiAoaXNfb2JqZWN0KCRzdHIpICYmIG1ldGhvZF9leGlzdHMoJHN0ciwgJ19fdG9TdHJpbmcnKSkpKQorCQl7CisJCQlyZXR1cm4gcGdfZXNjYXBlX2xpdGVyYWwoJHRoaXMtPmNvbm5faWQsICRzdHIpOworCQl9CisJCWVsc2VpZiAoaXNfYm9vbCgkc3RyKSkKIAkJewogCQkJcmV0dXJuICgkc3RyKSA/ICdUUlVFJyA6ICdGQUxTRSc7CiAJCX0KQEAgLTUxMiw3ICs1MTYsNyBAQAogCSAqIE9SREVSIEJZCiAJICoKIAkgKiBAcGFyYW0Jc3RyaW5nCSRvcmRlcmJ5Ci0JICogQHBhcmFtCXN0cmluZwkkZGlyZWN0aW9uCUFTQyBvciBERVNDCisJICogQHBhcmFtCXN0cmluZwkkZGlyZWN0aW9uCUFTQywgREVTQyBvciBSQU5ET00KIAkgKiBAcGFyYW0JYm9vbAkkZXNjYXBlCiAJICogQHJldHVybglvYmplY3QKIAkgKi8KZGlmZiAtLWdpdCBhL3N5c3RlbS9oZWxwZXJzL2NhcHRjaGFfaGVscGVyLnBocCBiL3N5c3RlbS9oZWxwZXJzL2NhcHRjaGFfaGVscGVyLnBocAppbmRleCAyZDJhZTc3Li4yNGNkNTM1IDEwMDY0NAotLS0gYS9zeXN0ZW0vaGVscGVycy9jYXB0Y2hhX2hlbHBlci5waHAKKysrIGIvc3lzdGVtL2hlbHBlcnMvY2FwdGNoYV9oZWxwZXIucGhwCkBAIC0xMjYsOSArMTI2LDkgQEAKIAkJLy8gRGV0ZXJtaW5lIGFuZ2xlIGFuZCBwb3NpdGlvbgogCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkkbGVuZ3RoCT0gc3RybGVuKCR3b3JkKTsKLQkJJGFuZ2xlCT0gKCRsZW5ndGggPj0gNikgPyByYW5kKC0oJGxlbmd0aC02KSwgKCRsZW5ndGgtNikpIDogMDsKLQkJJHhfYXhpcwk9IHJhbmQoNiwgKDM2MC8kbGVuZ3RoKS0xNik7Ci0JCSR5X2F4aXMgPSAoJGFuZ2xlID49IDApID8gcmFuZCgkaW1nX2hlaWdodCwgJGltZ193aWR0aCkgOiByYW5kKDYsICRpbWdfaGVpZ2h0KTsKKwkJJGFuZ2xlCT0gKCRsZW5ndGggPj0gNikgPyBtdF9yYW5kKC0oJGxlbmd0aC02KSwgKCRsZW5ndGgtNikpIDogMDsKKwkJJHhfYXhpcwk9IG10X3JhbmQoNiwgKDM2MC8kbGVuZ3RoKS0xNik7CisJCSR5X2F4aXMgPSAoJGFuZ2xlID49IDApID8gbXRfcmFuZCgkaW1nX2hlaWdodCwgJGltZ193aWR0aCkgOiBtdF9yYW5kKDYsICRpbWdfaGVpZ2h0KTsKIAogCQkvLyBDcmVhdGUgaW1hZ2UKIAkJLy8gUEhQLm5ldCByZWNvbW1lbmRzIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCksIGJ1dCBpdCBpc24ndCBhbHdheXMgYXZhaWxhYmxlCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogCQlpc19hcnJheSgkY29sb3JzKSBPUiAkY29sb3JzID0gJGRlZmF1bHRzWydjb2xvcnMnXTsKIAotCQlmb3JlYWNoIChhcnJheV9rZXlzKCRkZWZhdWx0Wydjb2xvcnMnXSkgYXMgJGtleSkKKwkJZm9yZWFjaCAoYXJyYXlfa2V5cygkZGVmYXVsdHNbJ2NvbG9ycyddKSBhcyAka2V5KQogCQl7CiAJCQkvLyBDaGVjayBmb3IgYSBwb3NzaWJsZSBtaXNzaW5nIHZhbHVlCiAJCQlpc19hcnJheSgkY29sb3JzWyRrZXldKSBPUiAkY29sb3JzWyRrZXldID0gJGRlZmF1bHRzWydjb2xvcnMnXVska2V5XTsKQEAgLTE4MywxMyArMTgzLDEzIEBACiAJCWlmICgkdXNlX2ZvbnQgPT09IEZBTFNFKQogCQl7CiAJCQkkZm9udF9zaXplID0gNTsKLQkJCSR4ID0gcmFuZCgwLCAkaW1nX3dpZHRoIC8gKCRsZW5ndGggLyAzKSk7CisJCQkkeCA9IG10X3JhbmQoMCwgJGltZ193aWR0aCAvICgkbGVuZ3RoIC8gMykpOwogCQkJJHkgPSAwOwogCQl9CiAJCWVsc2UKIAkJewogCQkJJGZvbnRfc2l6ZSA9IDE2OwotCQkJJHggPSByYW5kKDAsICRpbWdfd2lkdGggLyAoJGxlbmd0aCAvIDEuNSkpOworCQkJJHggPSBtdF9yYW5kKDAsICRpbWdfd2lkdGggLyAoJGxlbmd0aCAvIDEuNSkpOwogCQkJJHkgPSAkZm9udF9zaXplICsgMjsKIAkJfQogCkBAIC0xOTcsMTMgKzE5NywxMyBAQAogCQl7CiAJCQlpZiAoJHVzZV9mb250ID09PSBGQUxTRSkKIAkJCXsKLQkJCQkkeSA9IHJhbmQoMCAsICRpbWdfaGVpZ2h0IC8gMik7CisJCQkJJHkgPSBtdF9yYW5kKDAgLCAkaW1nX2hlaWdodCAvIDIpOwogCQkJCWltYWdlc3RyaW5nKCRpbSwgJGZvbnRfc2l6ZSwgJHgsICR5LCAkd29yZFskaV0sICRjb2xvcnNbJ3RleHQnXSk7CiAJCQkJJHggKz0gKCRmb250X3NpemUgKiAyKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkkeSA9IHJhbmQoJGltZ19oZWlnaHQgLyAyLCAkaW1nX2hlaWdodCAtIDMpOworCQkJCSR5ID0gbXRfcmFuZCgkaW1nX2hlaWdodCAvIDIsICRpbWdfaGVpZ2h0IC0gMyk7CiAJCQkJaW1hZ2V0dGZ0ZXh0KCRpbSwgJGZvbnRfc2l6ZSwgJGFuZ2xlLCAkeCwgJHksICRjb2xvcnNbJ3RleHQnXSwgJGZvbnRfcGF0aCwgJHdvcmRbJGldKTsKIAkJCQkkeCArPSAkZm9udF9zaXplOwogCQkJfQpAQCAtMjE1LDEyICsyMTUsMTIgQEAKIAkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJLy8gIEdlbmVyYXRlIHRoZSBpbWFnZQogCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkkaW1nX25hbWUgPSAkbm93LicuanBnJzsKLQkJSW1hZ2VKUEVHKCRpbSwgJGltZ19wYXRoLiRpbWdfbmFtZSk7Ci0JCSRpbWcgPSAnPGltZyBzcmM9IicuJGltZ191cmwuJGltZ19uYW1lLiciIHN0eWxlPSJ3aWR0aDogJy4kaW1nX3dpZHRoLic7IGhlaWdodDogJy4kaW1nX2hlaWdodCAuJzsgYm9yZGVyOiAwOyIgYWx0PSIgIiAvPic7CisJCSRpbWdfZmlsZW5hbWUgPSAkbm93LicuanBnJzsKKwkJSW1hZ2VKUEVHKCRpbSwgJGltZ19wYXRoLiRpbWdfZmlsZW5hbWUpOworCQkkaW1nID0gJzxpbWcgc3JjPSInLiRpbWdfdXJsLiRpbWdfZmlsZW5hbWUuJyIgc3R5bGU9IndpZHRoOiAnLiRpbWdfd2lkdGguJzsgaGVpZ2h0OiAnLiRpbWdfaGVpZ2h0IC4nOyBib3JkZXI6IDA7IiBhbHQ9IiAiIC8+JzsKIAkJSW1hZ2VEZXN0cm95KCRpbSk7CiAKLQkJcmV0dXJuIGFycmF5KCd3b3JkJyA9PiAkd29yZCwgJ3RpbWUnID0+ICRub3csICdpbWFnZScgPT4gJGltZyk7CisJCXJldHVybiBhcnJheSgnd29yZCcgPT4gJHdvcmQsICd0aW1lJyA9PiAkbm93LCAnaW1hZ2UnID0+ICRpbWcsICdmaWxlbmFtZScgPT4gJGltZ19maWxlbmFtZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zeXN0ZW0vaGVscGVycy9jb29raWVfaGVscGVyLnBocCBiL3N5c3RlbS9oZWxwZXJzL2Nvb2tpZV9oZWxwZXIucGhwCmluZGV4IGU1Y2Y2YjEuLmE3OTA4M2EgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9oZWxwZXJzL2Nvb2tpZV9oZWxwZXIucGhwCisrKyBiL3N5c3RlbS9oZWxwZXJzL2Nvb2tpZV9oZWxwZXIucGhwCkBAIC01NiwxMSArNTYsMTAgQEAKIAkgKiBAcGFyYW0JYm9vbAl0cnVlIG1ha2VzIHRoZSBjb29raWUgYWNjZXNzaWJsZSB2aWEgaHR0cChzKSBvbmx5IChubyBqYXZhc2NyaXB0KQogCSAqIEByZXR1cm4Jdm9pZAogCSAqLwotCWZ1bmN0aW9uIHNldF9jb29raWUoJG5hbWUgPSAnJywgJHZhbHVlID0gJycsICRleHBpcmUgPSAnJywgJGRvbWFpbiA9ICcnLCAkcGF0aCA9ICcvJywgJHByZWZpeCA9ICcnLCAkc2VjdXJlID0gRkFMU0UsICRodHRwb25seSA9IEZBTFNFKQorCWZ1bmN0aW9uIHNldF9jb29raWUoJG5hbWUsICR2YWx1ZSA9ICcnLCAkZXhwaXJlID0gJycsICRkb21haW4gPSAnJywgJHBhdGggPSAnLycsICRwcmVmaXggPSAnJywgJHNlY3VyZSA9IEZBTFNFLCAkaHR0cG9ubHkgPSBGQUxTRSkKIAl7CiAJCS8vIFNldCB0aGUgY29uZmlnIGZpbGUgb3B0aW9ucwotCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7Ci0JCSRDSS0+aW5wdXQtPnNldF9jb29raWUoJG5hbWUsICR2YWx1ZSwgJGV4cGlyZSwgJGRvbWFpbiwgJHBhdGgsICRwcmVmaXgsICRzZWN1cmUsICRodHRwb25seSk7CisJCWdldF9pbnN0YW5jZSgpLT5pbnB1dC0+c2V0X2Nvb2tpZSgkbmFtZSwgJHZhbHVlLCAkZXhwaXJlLCAkZG9tYWluLCAkcGF0aCwgJHByZWZpeCwgJHNlY3VyZSwgJGh0dHBvbmx5KTsKIAl9CiB9CiAKQEAgLTc1LDExICs3NCwxMSBAQAogCSAqIEBwYXJhbQlib29sCiAJICogQHJldHVybgltaXhlZAogCSAqLwotCWZ1bmN0aW9uIGdldF9jb29raWUoJGluZGV4ID0gJycsICR4c3NfY2xlYW4gPSBGQUxTRSkKKwlmdW5jdGlvbiBnZXRfY29va2llKCRpbmRleCwgJHhzc19jbGVhbiA9IE5VTEwpCiAJewotCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7CisJCWlzX2Jvb2woJHhzc19jbGVhbikgT1IgJHhzc19jbGVhbiA9IChjb25maWdfaXRlbSgnZ2xvYmFsX3hzc19maWx0ZXJpbmcnKSA9PT0gVFJVRSk7CiAJCSRwcmVmaXggPSBpc3NldCgkX0NPT0tJRVskaW5kZXhdKSA/ICcnIDogY29uZmlnX2l0ZW0oJ2Nvb2tpZV9wcmVmaXgnKTsKLQkJcmV0dXJuICRDSS0+aW5wdXQtPmNvb2tpZSgkcHJlZml4LiRpbmRleCwgJHhzc19jbGVhbik7CisJCXJldHVybiBnZXRfaW5zdGFuY2UoKS0+aW5wdXQtPmNvb2tpZSgkcHJlZml4LiRpbmRleCwgJHhzc19jbGVhbik7CiAJfQogfQogCkBAIC05Niw3ICs5NSw3IEBACiAJICogQHBhcmFtCXN0cmluZwl0aGUgY29va2llIHByZWZpeAogCSAqIEByZXR1cm4Jdm9pZAogCSAqLwotCWZ1bmN0aW9uIGRlbGV0ZV9jb29raWUoJG5hbWUgPSAnJywgJGRvbWFpbiA9ICcnLCAkcGF0aCA9ICcvJywgJHByZWZpeCA9ICcnKQorCWZ1bmN0aW9uIGRlbGV0ZV9jb29raWUoJG5hbWUsICRkb21haW4gPSAnJywgJHBhdGggPSAnLycsICRwcmVmaXggPSAnJykKIAl7CiAJCXNldF9jb29raWUoJG5hbWUsICcnLCAnJywgJGRvbWFpbiwgJHBhdGgsICRwcmVmaXgpOwogCX0KZGlmZiAtLWdpdCBhL3N5c3RlbS9oZWxwZXJzL2ZpbGVfaGVscGVyLnBocCBiL3N5c3RlbS9oZWxwZXJzL2ZpbGVfaGVscGVyLnBocAppbmRleCA0YjQ1YTYyLi4wNTg3NzQwIDEwMDY0NAotLS0gYS9zeXN0ZW0vaGVscGVycy9maWxlX2hlbHBlci5waHAKKysrIGIvc3lzdGVtL2hlbHBlcnMvZmlsZV9oZWxwZXIucGhwCkBAIC03OSwxMSArNzksMTkgQEAKIAkJfQogCiAJCWZsb2NrKCRmcCwgTE9DS19FWCk7Ci0JCWZ3cml0ZSgkZnAsICRkYXRhKTsKKworCQlmb3IgKCR3cml0dGVuID0gMCwgJGxlbmd0aCA9IHN0cmxlbigkZGF0YSk7ICR3cml0dGVuIDwgJGxlbmd0aDsgJHdyaXR0ZW4gKz0gJHJlc3VsdCkKKwkJeworCQkJaWYgKCgkcmVzdWx0ID0gZndyaXRlKCRmcCwgc3Vic3RyKCRkYXRhLCAkd3JpdHRlbikpKSA9PT0gRkFMU0UpCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwogCQlmbG9jaygkZnAsIExPQ0tfVU4pOwogCQlmY2xvc2UoJGZwKTsKIAotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIGlzX2ludCgkcmVzdWx0KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3N5c3RlbS9oZWxwZXJzL2Zvcm1faGVscGVyLnBocCBiL3N5c3RlbS9oZWxwZXJzL2Zvcm1faGVscGVyLnBocAppbmRleCAyMDAyZDQyLi5hM2QyOTliIDEwMDY0NAotLS0gYS9zeXN0ZW0vaGVscGVycy9mb3JtX2hlbHBlci5waHAKKysrIGIvc3lzdGVtL2hlbHBlcnMvZm9ybV9oZWxwZXIucGhwCkBAIC01MCwxNSArNTAsMTAgQEAKIAkgKiBAcGFyYW0JYXJyYXkJYSBrZXkvdmFsdWUgcGFpciBoaWRkZW4gZGF0YQogCSAqIEByZXR1cm4Jc3RyaW5nCiAJICovCi0JZnVuY3Rpb24gZm9ybV9vcGVuKCRhY3Rpb24gPSAnJywgJGF0dHJpYnV0ZXMgPSAnJywgJGhpZGRlbiA9IGFycmF5KCkpCisJZnVuY3Rpb24gZm9ybV9vcGVuKCRhY3Rpb24gPSAnJywgJGF0dHJpYnV0ZXMgPSBhcnJheSgpLCAkaGlkZGVuID0gYXJyYXkoKSkKIAl7CiAJCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKIAotCQlpZiAoJGF0dHJpYnV0ZXMgPT09ICcnKQotCQl7Ci0JCQkkYXR0cmlidXRlcyA9ICdtZXRob2Q9InBvc3QiJzsKLQkJfQotCiAJCS8vIElmIGFuIGFjdGlvbiBpcyBub3QgYSBmdWxsIFVSTCB0aGVuIHR1cm4gaXQgaW50byBvbmUKIAkJaWYgKCRhY3Rpb24gJiYgc3RycG9zKCRhY3Rpb24sICc6Ly8nKSA9PT0gRkFMU0UpCiAJCXsKQEAgLTcwLDEwICs2NSwyMiBAQAogCQkJJGFjdGlvbiA9ICRDSS0+Y29uZmlnLT5zaXRlX3VybCgkQ0ktPnVyaS0+dXJpX3N0cmluZygpKTsKIAkJfQogCi0JCSRmb3JtID0gJzxmb3JtIGFjdGlvbj0iJy4kYWN0aW9uLiciJy5fYXR0cmlidXRlc190b19zdHJpbmcoJGF0dHJpYnV0ZXMsIFRSVUUpLiI+XG4iOworCQkkYXR0cmlidXRlcyA9IF9hdHRyaWJ1dGVzX3RvX3N0cmluZygkYXR0cmlidXRlcyk7CisKKwkJaWYgKHN0cmlwb3MoJGF0dHJpYnV0ZXMsICdtZXRob2Q9JykgPT09IEZBTFNFKQorCQl7CisJCQkkYXR0cmlidXRlcyAuPSAnIG1ldGhvZD0icG9zdCInOworCQl9CisKKwkJaWYgKHN0cmlwb3MoJGF0dHJpYnV0ZXMsICdhY2NlcHQtY2hhcnNldD0nKSA9PT0gRkFMU0UpCisJCXsKKwkJCSRhdHRyaWJ1dGVzIC49ICcgYWNjZXB0LWNoYXJzZXQ9Iicuc3RydG9sb3dlcihjb25maWdfaXRlbSgnY2hhcnNldCcpKS4nIic7CisJCX0KKworCQkkZm9ybSA9ICc8Zm9ybSBhY3Rpb249IicuJGFjdGlvbi4nIicuJGF0dHJpYnV0ZXMuIj5cbiI7CiAKIAkJLy8gQWRkIENTUkYgZmllbGQgaWYgZW5hYmxlZCwgYnV0IGxlYXZlIGl0IG91dCBmb3IgR0VUIHJlcXVlc3RzIGFuZCByZXF1ZXN0cyB0byBleHRlcm5hbCB3ZWJzaXRlcwotCQlpZiAoJENJLT5jb25maWctPml0ZW0oJ2NzcmZfcHJvdGVjdGlvbicpID09PSBUUlVFICYmICEgKHN0cnBvcygkYWN0aW9uLCAkQ0ktPmNvbmZpZy0+YmFzZV91cmwoKSkgPT09IEZBTFNFIE9SIHN0cnBvcygkZm9ybSwgJ21ldGhvZD0iZ2V0IicpKSkKKwkJaWYgKCRDSS0+Y29uZmlnLT5pdGVtKCdjc3JmX3Byb3RlY3Rpb24nKSA9PT0gVFJVRSAmJiAhIChzdHJwb3MoJGFjdGlvbiwgJENJLT5jb25maWctPmJhc2VfdXJsKCkpID09PSBGQUxTRSBPUiBzdHJpcG9zKCRmb3JtLCAnbWV0aG9kPSJnZXQiJykpKQogCQl7CiAJCQkkaGlkZGVuWyRDSS0+c2VjdXJpdHktPmdldF9jc3JmX3Rva2VuX25hbWUoKV0gPSAkQ0ktPnNlY3VyaXR5LT5nZXRfY3NyZl9oYXNoKCk7CiAJCX0KQEAgLTMwOSw3ICszMTYsNyBAQAogCQl7CiAJCQlpc3NldCgkbmFtZVsnb3B0aW9ucyddKSBPUiAkbmFtZVsnb3B0aW9ucyddID0gYXJyYXkoKTsKIAkJCWlzc2V0KCRuYW1lWydzZWxlY3RlZCddKSBPUiAkbmFtZVsnc2VsZWN0ZWQnXSA9IGFycmF5KCk7Ci0JCQlpc3NldCgkbmFtZVsnZXh0cmEnXSkgT1IgJG5hbWVbJ2V4dHJhJ10gPSBhcnJheSgpOworCQkJaXNzZXQoJG5hbWVbJ2V4dHJhJ10pIE9SICRuYW1lWydleHRyYSddID0gJyc7CiAKIAkJCXJldHVybiBmb3JtX2Ryb3Bkb3duKCRuYW1lWyduYW1lJ10sICRuYW1lWydvcHRpb25zJ10sICRuYW1lWydzZWxlY3RlZCddLCAkbmFtZVsnZXh0cmEnXSk7CiAJCX0KQEAgLTMyMiwxMCArMzI5LDcgQEAKIAkJCSRzZWxlY3RlZCA9IGFycmF5KCRfUE9TVFskbmFtZV0pOwogCQl9CiAKLQkJaWYgKCRleHRyYSAhPSAnJykKLQkJewotCQkJJGV4dHJhID0gJyAnLiRleHRyYTsKLQkJfQorCQkkZXh0cmEgPSBfYXR0cmlidXRlc190b19zdHJpbmcoJGV4dHJhKTsKIAogCQkkbXVsdGlwbGUgPSAoY291bnQoJHNlbGVjdGVkKSA+IDEgJiYgc3RycG9zKCRleHRyYSwgJ211bHRpcGxlJykgPT09IEZBTFNFKSA/ICcgbXVsdGlwbGU9Im11bHRpcGxlIicgOiAnJzsKIApAQCAtNTQyLDEyICs1NDYsMTIgQEAKIAkgKiB1c2UgZm9ybV9maWVsZHNldF9jbG9zZSgpCiAJICoKIAkgKiBAcGFyYW0Jc3RyaW5nCVRoZSBsZWdlbmQgdGV4dAotCSAqIEBwYXJhbQlzdHJpbmcJQWRkaXRpb25hbCBhdHRyaWJ1dGVzCisJICogQHBhcmFtCWFycmF5CUFkZGl0aW9uYWwgYXR0cmlidXRlcwogCSAqIEByZXR1cm4Jc3RyaW5nCiAJICovCiAJZnVuY3Rpb24gZm9ybV9maWVsZHNldCgkbGVnZW5kX3RleHQgPSAnJywgJGF0dHJpYnV0ZXMgPSBhcnJheSgpKQogCXsKLQkJJGZpZWxkc2V0ID0gJzxmaWVsZHNldCcuX2F0dHJpYnV0ZXNfdG9fc3RyaW5nKCRhdHRyaWJ1dGVzLCBGQUxTRSkuIj5cbiI7CisJCSRmaWVsZHNldCA9ICc8ZmllbGRzZXQnLl9hdHRyaWJ1dGVzX3RvX3N0cmluZygkYXR0cmlidXRlcykuIj5cbiI7CiAJCWlmICgkbGVnZW5kX3RleHQgIT09ICcnKQogCQl7CiAJCQlyZXR1cm4gJGZpZWxkc2V0Lic8bGVnZW5kPicuJGxlZ2VuZF90ZXh0LiI8L2xlZ2VuZD5cbiI7CkBAIC02NjgsMzcgKzY3MiwzMyBAQAogCSAqLwogCWZ1bmN0aW9uIHNldF9zZWxlY3QoJGZpZWxkID0gJycsICR2YWx1ZSA9ICcnLCAkZGVmYXVsdCA9IEZBTFNFKQogCXsKLQkJJE9CSiA9JiBfZ2V0X3ZhbGlkYXRpb25fb2JqZWN0KCk7CisJCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKIAotCQlpZiAoJE9CSiA9PT0gRkFMU0UpCisJCWlmIChpc3NldCgkQ0ktPmZvcm1fdmFsaWRhdGlvbikgJiYgaXNfb2JqZWN0KCRDSS0+Zm9ybV92YWxpZGF0aW9uKSAmJiAkQ0ktPmZvcm1fdmFsaWRhdGlvbi0+aGFzX3J1bGUoJGZpZWxkKSkKIAkJewotCQkJaWYgKCAhIGlzc2V0KCRfUE9TVFskZmllbGRdKSkKKwkJCXJldHVybiAkQ0ktPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3NlbGVjdCgkZmllbGQsICR2YWx1ZSwgJGRlZmF1bHQpOworCQl9CisJCWVsc2VpZiAoKCRpbnB1dCA9ICRDSS0+aW5wdXQtPnBvc3QoJGZpZWxkLCBGQUxTRSkpID09PSBOVUxMKQorCQl7CisJCQlyZXR1cm4gKCRkZWZhdWx0ID09PSBUUlVFKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJzsKKwkJfQorCisJCSR2YWx1ZSA9IChzdHJpbmcpICR2YWx1ZTsKKwkJaWYgKGlzX2FycmF5KCRpbnB1dCkpCisJCXsKKwkJCS8vIE5vdGU6IGluX2FycmF5KCcnLCBhcnJheSgwKSkgcmV0dXJucyBUUlVFLCBkbyBub3QgdXNlIGl0CisJCQlmb3JlYWNoICgkaW5wdXQgYXMgJiR2KQogCQkJewotCQkJCWlmIChjb3VudCgkX1BPU1QpID09PSAwICYmICRkZWZhdWx0ID09PSBUUlVFKQorCQkJCWlmICgkdmFsdWUgPT09ICR2KQogCQkJCXsKIAkJCQkJcmV0dXJuICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CiAJCQkJfQotCQkJCXJldHVybiAnJzsKIAkJCX0KIAotCQkJJGZpZWxkID0gJF9QT1NUWyRmaWVsZF07Ci0KLQkJCWlmIChpc19hcnJheSgkZmllbGQpKQotCQkJewotCQkJCWlmICggISBpbl9hcnJheSgkdmFsdWUsICRmaWVsZCkpCi0JCQkJewotCQkJCQlyZXR1cm4gJyc7Ci0JCQkJfQotCQkJfQotCQkJZWxzZWlmICgoJGZpZWxkID09ICcnIE9SICR2YWx1ZSA9PSAnJykgT1IgJGZpZWxkICE9PSAkdmFsdWUpCi0JCQl7Ci0JCQkJcmV0dXJuICcnOwotCQkJfQotCi0JCQlyZXR1cm4gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKKwkJCXJldHVybiAnJzsKIAkJfQogCi0JCXJldHVybiAkT0JKLT5zZXRfc2VsZWN0KCRmaWVsZCwgJHZhbHVlLCAkZGVmYXVsdCk7CisJCXJldHVybiAoJGlucHV0ID09PSAkdmFsdWUpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnOwogCX0KIH0KIApAQCAtNzE5LDM3ICs3MTksMzMgQEAKIAkgKi8KIAlmdW5jdGlvbiBzZXRfY2hlY2tib3goJGZpZWxkID0gJycsICR2YWx1ZSA9ICcnLCAkZGVmYXVsdCA9IEZBTFNFKQogCXsKLQkJJE9CSiA9JiBfZ2V0X3ZhbGlkYXRpb25fb2JqZWN0KCk7CisJCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKIAotCQlpZiAoJE9CSiA9PT0gRkFMU0UpCisJCWlmIChpc3NldCgkQ0ktPmZvcm1fdmFsaWRhdGlvbikgJiYgaXNfb2JqZWN0KCRDSS0+Zm9ybV92YWxpZGF0aW9uKSAmJiAkQ0ktPmZvcm1fdmFsaWRhdGlvbi0+aGFzX3J1bGUoJGZpZWxkKSkKIAkJewotCQkJaWYgKCAhIGlzc2V0KCRfUE9TVFskZmllbGRdKSkKKwkJCXJldHVybiAkQ0ktPmZvcm1fdmFsaWRhdGlvbi0+c2V0X2NoZWNrYm94KCRmaWVsZCwgJHZhbHVlLCAkZGVmYXVsdCk7CisJCX0KKwkJZWxzZWlmICgoJGlucHV0ID0gJENJLT5pbnB1dC0+cG9zdCgkZmllbGQsIEZBTFNFKSkgPT09IE5VTEwpCisJCXsKKwkJCXJldHVybiAoJGRlZmF1bHQgPT09IFRSVUUpID8gJyBjaGVja2VkPSJjaGVja2VkIicgOiAnJzsKKwkJfQorCisJCSR2YWx1ZSA9IChzdHJpbmcpICR2YWx1ZTsKKwkJaWYgKGlzX2FycmF5KCRpbnB1dCkpCisJCXsKKwkJCS8vIE5vdGU6IGluX2FycmF5KCcnLCBhcnJheSgwKSkgcmV0dXJucyBUUlVFLCBkbyBub3QgdXNlIGl0CisJCQlmb3JlYWNoICgkaW5wdXQgYXMgJiR2KQogCQkJewotCQkJCWlmIChjb3VudCgkX1BPU1QpID09PSAwICYmICRkZWZhdWx0ID09PSBUUlVFKQorCQkJCWlmICgkdmFsdWUgPT09ICR2KQogCQkJCXsKIAkJCQkJcmV0dXJuICcgY2hlY2tlZD0iY2hlY2tlZCInOwogCQkJCX0KLQkJCQlyZXR1cm4gJyc7CiAJCQl9CiAKLQkJCSRmaWVsZCA9ICRfUE9TVFskZmllbGRdOwotCi0JCQlpZiAoaXNfYXJyYXkoJGZpZWxkKSkKLQkJCXsKLQkJCQlpZiAoICEgaW5fYXJyYXkoJHZhbHVlLCAkZmllbGQpKQotCQkJCXsKLQkJCQkJcmV0dXJuICcnOwotCQkJCX0KLQkJCX0KLQkJCWVsc2VpZiAoKCRmaWVsZCA9PSAnJyBPUiAkdmFsdWUgPT0gJycpIE9SICRmaWVsZCAhPT0gJHZhbHVlKQotCQkJewotCQkJCXJldHVybiAnJzsKLQkJCX0KLQotCQkJcmV0dXJuICcgY2hlY2tlZD0iY2hlY2tlZCInOworCQkJcmV0dXJuICcnOwogCQl9CiAKLQkJcmV0dXJuICRPQkotPnNldF9jaGVja2JveCgkZmllbGQsICR2YWx1ZSwgJGRlZmF1bHQpOworCQlyZXR1cm4gKCRpbnB1dCA9PT0gJHZhbHVlKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CiAJfQogfQogCkBAIC03NjMsNDcgKzc1OSwyNSBAQAogCSAqIExldCdzIHlvdSBzZXQgdGhlIHNlbGVjdGVkIHZhbHVlIG9mIGEgcmFkaW8gZmllbGQgdmlhIGluZm8gaW4gdGhlIFBPU1QgYXJyYXkuCiAJICogSWYgRm9ybSBWYWxpZGF0aW9uIGlzIGFjdGl2ZSBpdCByZXRyaWV2ZXMgdGhlIGluZm8gZnJvbSB0aGUgdmFsaWRhdGlvbiBjbGFzcwogCSAqCi0JICogQHBhcmFtCXN0cmluZwotCSAqIEBwYXJhbQlzdHJpbmcKLQkgKiBAcGFyYW0JYm9vbAorCSAqIEBwYXJhbQlzdHJpbmcJJGZpZWxkCisJICogQHBhcmFtCXN0cmluZwkkdmFsdWUKKwkgKiBAcGFyYW0JYm9vbAkkZGVmYXVsdAogCSAqIEByZXR1cm4Jc3RyaW5nCiAJICovCiAJZnVuY3Rpb24gc2V0X3JhZGlvKCRmaWVsZCA9ICcnLCAkdmFsdWUgPSAnJywgJGRlZmF1bHQgPSBGQUxTRSkKIAl7Ci0JCSRPQkogPSYgX2dldF92YWxpZGF0aW9uX29iamVjdCgpOworCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7CiAKLQkJaWYgKCRPQkogPT09IEZBTFNFKQorCQlpZiAoaXNzZXQoJENJLT5mb3JtX3ZhbGlkYXRpb24pICYmIGlzX29iamVjdCgkQ0ktPmZvcm1fdmFsaWRhdGlvbikgJiYgJENJLT5mb3JtX3ZhbGlkYXRpb24tPmhhc19ydWxlKCRmaWVsZCkpCiAJCXsKLQkJCWlmICggISBpc3NldCgkX1BPU1RbJGZpZWxkXSkpCi0JCQl7Ci0JCQkJaWYgKGNvdW50KCRfUE9TVCkgPT09IDAgJiYgJGRlZmF1bHQgPT09IFRSVUUpCi0JCQkJewotCQkJCQlyZXR1cm4gJyBjaGVja2VkPSJjaGVja2VkIic7Ci0JCQkJfQotCQkJCXJldHVybiAnJzsKLQkJCX0KLQotCQkJJGZpZWxkID0gJF9QT1NUWyRmaWVsZF07Ci0KLQkJCWlmIChpc19hcnJheSgkZmllbGQpKQotCQkJewotCQkJCWlmICggISBpbl9hcnJheSgkdmFsdWUsICRmaWVsZCkpCi0JCQkJewotCQkJCQlyZXR1cm4gJyc7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWlmICgoJGZpZWxkID09ICcnIE9SICR2YWx1ZSA9PSAnJykgT1IgJGZpZWxkICE9PSAkdmFsdWUpCi0JCQkJewotCQkJCQlyZXR1cm4gJyc7Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gJyBjaGVja2VkPSJjaGVja2VkIic7CisJCQlyZXR1cm4gJENJLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9yYWRpbygkZmllbGQsICR2YWx1ZSwgJGRlZmF1bHQpOworCQl9CisJCWVsc2VpZiAoKCRpbnB1dCA9ICRDSS0+aW5wdXQtPnBvc3QoJGZpZWxkLCBGQUxTRSkpID09PSBOVUxMKQorCQl7CisJCQlyZXR1cm4gKCRkZWZhdWx0ID09PSBUUlVFKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CiAJCX0KIAotCQlyZXR1cm4gJE9CSi0+c2V0X3JhZGlvKCRmaWVsZCwgJHZhbHVlLCAkZGVmYXVsdCk7CisJCXJldHVybiAoJGlucHV0ID09PSAoc3RyaW5nKSAkdmFsdWUpID8gJyBjaGVja2VkPSJjaGVja2VkIicgOiAnJzsKIAl9CiB9CiAKQEAgLTkyMCw0NSArODk0LDI0IEBACiAJICogSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgc29tZSBvZiB0aGUgZm9ybSBoZWxwZXJzCiAJICoKIAkgKiBAcGFyYW0JbWl4ZWQKLQkgKiBAcGFyYW0JYm9vbAogCSAqIEByZXR1cm4Jc3RyaW5nCiAJICovCi0JZnVuY3Rpb24gX2F0dHJpYnV0ZXNfdG9fc3RyaW5nKCRhdHRyaWJ1dGVzLCAkZm9ybXRhZyA9IEZBTFNFKQorCWZ1bmN0aW9uIF9hdHRyaWJ1dGVzX3RvX3N0cmluZygkYXR0cmlidXRlcykKIAl7Ci0JCWlmIChpc19zdHJpbmcoJGF0dHJpYnV0ZXMpICYmIHN0cmxlbigkYXR0cmlidXRlcykgPiAwKQorCQlpZiAoZW1wdHkoJGF0dHJpYnV0ZXMpKQogCQl7Ci0JCQlpZiAoJGZvcm10YWcgPT09IFRSVUUgJiYgc3RycG9zKCRhdHRyaWJ1dGVzLCAnbWV0aG9kPScpID09PSBGQUxTRSkKLQkJCXsKLQkJCQkkYXR0cmlidXRlcyAuPSAnIG1ldGhvZD0icG9zdCInOwotCQkJfQotCi0JCQlpZiAoJGZvcm10YWcgPT09IFRSVUUgJiYgc3RycG9zKCRhdHRyaWJ1dGVzLCAnYWNjZXB0LWNoYXJzZXQ9JykgPT09IEZBTFNFKQotCQkJewotCQkJCSRhdHRyaWJ1dGVzIC49ICcgYWNjZXB0LWNoYXJzZXQ9Iicuc3RydG9sb3dlcihjb25maWdfaXRlbSgnY2hhcnNldCcpKS4nIic7Ci0JCQl9Ci0KLQkJCXJldHVybiAnICcuJGF0dHJpYnV0ZXM7CisJCQlyZXR1cm4gJyc7CiAJCX0KIAotCQlpZiAoaXNfb2JqZWN0KCRhdHRyaWJ1dGVzKSAmJiBjb3VudCgkYXR0cmlidXRlcykgPiAwKQorCQlpZiAoaXNfb2JqZWN0KCRhdHRyaWJ1dGVzKSkKIAkJewogCQkJJGF0dHJpYnV0ZXMgPSAoYXJyYXkpICRhdHRyaWJ1dGVzOwogCQl9CiAKLQkJaWYgKGlzX2FycmF5KCRhdHRyaWJ1dGVzKSAmJiAoJGZvcm10YWcgPT09IFRSVUUgT1IgY291bnQoJGF0dHJpYnV0ZXMpID4gMCkpCisJCWlmIChpc19hcnJheSgkYXR0cmlidXRlcykpCiAJCXsKIAkJCSRhdHRzID0gJyc7CiAKLQkJCWlmICggISBpc3NldCgkYXR0cmlidXRlc1snbWV0aG9kJ10pICYmICRmb3JtdGFnID09PSBUUlVFKQotCQkJewotCQkJCSRhdHRzIC49ICcgbWV0aG9kPSJwb3N0Iic7Ci0JCQl9Ci0KLQkJCWlmICggISBpc3NldCgkYXR0cmlidXRlc1snYWNjZXB0LWNoYXJzZXQnXSkgJiYgJGZvcm10YWcgPT09IFRSVUUpCi0JCQl7Ci0JCQkJJGF0dHMgLj0gJyBhY2NlcHQtY2hhcnNldD0iJy5zdHJ0b2xvd2VyKGNvbmZpZ19pdGVtKCdjaGFyc2V0JykpLiciJzsKLQkJCX0KLQogCQkJZm9yZWFjaCAoJGF0dHJpYnV0ZXMgYXMgJGtleSA9PiAkdmFsKQogCQkJewogCQkJCSRhdHRzIC49ICcgJy4ka2V5Lic9IicuJHZhbC4nIic7CkBAIC05NjYsNiArOTE5LDEzIEBACiAKIAkJCXJldHVybiAkYXR0czsKIAkJfQorCisJCWlmIChpc19zdHJpbmcoJGF0dHJpYnV0ZXMpKQorCQl7CisJCQlyZXR1cm4gJyAnLiRhdHRyaWJ1dGVzOworCQl9CisKKwkJcmV0dXJuIEZBTFNFOwogCX0KIH0KIApAQCAtOTg4LDcgKzk0OCw3IEBACiAJCS8vIFdlIHNldCB0aGlzIGFzIGEgdmFyaWFibGUgc2luY2Ugd2UncmUgcmV0dXJuaW5nIGJ5IHJlZmVyZW5jZS4KIAkJJHJldHVybiA9IEZBTFNFOwogCi0JCWlmIChGQUxTRSAhPT0gKCRvYmplY3QgPSAkQ0ktPmxvYWQtPmlzX2xvYWRlZCgnZm9ybV92YWxpZGF0aW9uJykpKQorCQlpZiAoRkFMU0UgIT09ICgkb2JqZWN0ID0gJENJLT5sb2FkLT5pc19sb2FkZWQoJ0Zvcm1fdmFsaWRhdGlvbicpKSkKIAkJewogCQkJaWYgKCAhIGlzc2V0KCRDSS0+JG9iamVjdCkgT1IgISBpc19vYmplY3QoJENJLT4kb2JqZWN0KSkKIAkJCXsKZGlmZiAtLWdpdCBhL3N5c3RlbS9oZWxwZXJzL2h0bWxfaGVscGVyLnBocCBiL3N5c3RlbS9oZWxwZXJzL2h0bWxfaGVscGVyLnBocAppbmRleCBlY2UzOTU4Li45ODhlZWU3IDEwMDY0NAotLS0gYS9zeXN0ZW0vaGVscGVycy9odG1sX2hlbHBlci5waHAKKysrIGIvc3lzdGVtL2hlbHBlcnMvaHRtbF9oZWxwZXIucGhwCkBAIC0xOTksMTUgKzE5OSwxMyBAQAogCQl7CiAJCQlpZiAoJGsgPT09ICdzcmMnICYmIHN0cnBvcygkdiwgJzovLycpID09PSBGQUxTRSkKIAkJCXsKLQkJCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7Ci0KIAkJCQlpZiAoJGluZGV4X3BhZ2UgPT09IFRSVUUpCiAJCQkJewotCQkJCQkkaW1nIC49ICcgc3JjPSInLiRDSS0+Y29uZmlnLT5zaXRlX3VybCgkdikuJyInOworCQkJCQkkaW1nIC49ICcgc3JjPSInLmdldF9pbnN0YW5jZSgpLT5jb25maWctPnNpdGVfdXJsKCR2KS4nIic7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCSRpbWcgLj0gJyBzcmM9IicuJENJLT5jb25maWctPnNsYXNoX2l0ZW0oJ2Jhc2VfdXJsJykuJHYuJyInOworCQkJCQkkaW1nIC49ICcgc3JjPSInLmdldF9pbnN0YW5jZSgpLT5jb25maWctPnNsYXNoX2l0ZW0oJ2Jhc2VfdXJsJykuJHYuJyInOwogCQkJCX0KIAkJCX0KIAkJCWVsc2UKZGlmZiAtLWdpdCBhL3N5c3RlbS9oZWxwZXJzL2xhbmd1YWdlX2hlbHBlci5waHAgYi9zeXN0ZW0vaGVscGVycy9sYW5ndWFnZV9oZWxwZXIucGhwCmluZGV4IDRkNTcxYTcuLmQ3YWE4ZTYgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9oZWxwZXJzL2xhbmd1YWdlX2hlbHBlci5waHAKKysrIGIvc3lzdGVtL2hlbHBlcnMvbGFuZ3VhZ2VfaGVscGVyLnBocApAQCAtNTIsOCArNTIsNyBAQAogCSAqLwogCWZ1bmN0aW9uIGxhbmcoJGxpbmUsICRmb3IgPSAnJywgJGF0dHJpYnV0ZXMgPSBhcnJheSgpKQogCXsKLQkJJENJID0mIGdldF9pbnN0YW5jZSgpOwotCQkkbGluZSA9ICRDSS0+bGFuZy0+bGluZSgkbGluZSk7CisJCSRsaW5lID0gZ2V0X2luc3RhbmNlKCktPmxhbmctPmxpbmUoJGxpbmUpOwogCiAJCWlmICgkZm9yICE9PSAnJykKIAkJewpkaWZmIC0tZ2l0IGEvc3lzdGVtL2hlbHBlcnMvc2VjdXJpdHlfaGVscGVyLnBocCBiL3N5c3RlbS9oZWxwZXJzL3NlY3VyaXR5X2hlbHBlci5waHAKaW5kZXggNGJiOTRhMi4uN2E2ZGY1NCAxMDA2NDQKLS0tIGEvc3lzdGVtL2hlbHBlcnMvc2VjdXJpdHlfaGVscGVyLnBocAorKysgYi9zeXN0ZW0vaGVscGVycy9zZWN1cml0eV9oZWxwZXIucGhwCkBAIC00OSw4ICs0OSw3IEBACiAJICovCiAJZnVuY3Rpb24geHNzX2NsZWFuKCRzdHIsICRpc19pbWFnZSA9IEZBTFNFKQogCXsKLQkJJENJID0mIGdldF9pbnN0YW5jZSgpOwotCQlyZXR1cm4gJENJLT5zZWN1cml0eS0+eHNzX2NsZWFuKCRzdHIsICRpc19pbWFnZSk7CisJCXJldHVybiBnZXRfaW5zdGFuY2UoKS0+c2VjdXJpdHktPnhzc19jbGVhbigkc3RyLCAkaXNfaW1hZ2UpOwogCX0KIH0KIApAQCAtNjYsOCArNjUsNyBAQAogCSAqLwogCWZ1bmN0aW9uIHNhbml0aXplX2ZpbGVuYW1lKCRmaWxlbmFtZSkKIAl7Ci0JCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKLQkJcmV0dXJuICRDSS0+c2VjdXJpdHktPnNhbml0aXplX2ZpbGVuYW1lKCRmaWxlbmFtZSk7CisJCXJldHVybiBnZXRfaW5zdGFuY2UoKS0+c2VjdXJpdHktPnNhbml0aXplX2ZpbGVuYW1lKCRmaWxlbmFtZSk7CiAJfQogfQogCkBAIC0xMDcsOCArMTA1LDcgQEAKIAkgKi8KIAlmdW5jdGlvbiBzdHJpcF9pbWFnZV90YWdzKCRzdHIpCiAJewotCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7Ci0JCXJldHVybiAkQ0ktPnNlY3VyaXR5LT5zdHJpcF9pbWFnZV90YWdzKCRzdHIpOworCQlyZXR1cm4gZ2V0X2luc3RhbmNlKCktPnNlY3VyaXR5LT5zdHJpcF9pbWFnZV90YWdzKCRzdHIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2hlbHBlcnMvdGV4dF9oZWxwZXIucGhwIGIvc3lzdGVtL2hlbHBlcnMvdGV4dF9oZWxwZXIucGhwCmluZGV4IGIyMzUxZGIuLmJkYTg0NDYgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9oZWxwZXJzL3RleHRfaGVscGVyLnBocAorKysgYi9zeXN0ZW0vaGVscGVycy90ZXh0X2hlbHBlci5waHAKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWZ1bmN0aW9uIGFzY2lpX3RvX2VudGl0aWVzKCRzdHIpCiAJewogCQkkb3V0ID0gJyc7Ci0JCWZvciAoJGkgPSAwLCAkcyA9IHN0cmxlbigkc3RyKSwgJGNvdW50ID0gMSwgJHRlbXAgPSBhcnJheSgpOyAkaSA8ICRzOyAkaSsrKQorCQlmb3IgKCRpID0gMCwgJHMgPSBzdHJsZW4oJHN0cikgLSAxLCAkY291bnQgPSAxLCAkdGVtcCA9IGFycmF5KCk7ICRpIDw9ICRzOyAkaSsrKQogCQl7CiAJCQkkb3JkaW5hbCA9IG9yZCgkc3RyWyRpXSk7CiAKQEAgLTE2NCw2ICsxNjQsMTEgQEAKIAkJCQkJJGNvdW50ID0gMTsKIAkJCQkJJHRlbXAgPSBhcnJheSgpOwogCQkJCX0KKwkJCQkvLyBJZiB0aGlzIGlzIHRoZSBsYXN0IGl0ZXJhdGlvbiwganVzdCBvdXRwdXQgd2hhdGV2ZXIgd2UgaGF2ZQorCQkJCWVsc2VpZiAoJGkgPT09ICRzKQorCQkJCXsKKwkJCQkJJG91dCAuPSAnJiMnLmltcGxvZGUoJzsnLCAkdGVtcCkuJzsnOworCQkJCX0KIAkJCX0KIAkJfQogCkBAIC0zMjksMjUgKzMzNCwxNyBAQAogCSAqCiAJICogSGlnaGxpZ2h0cyBhIHBocmFzZSB3aXRoaW4gYSB0ZXh0IHN0cmluZwogCSAqCi0JICogQHBhcmFtCXN0cmluZwl0aGUgdGV4dCBzdHJpbmcKLQkgKiBAcGFyYW0Jc3RyaW5nCXRoZSBwaHJhc2UgeW91J2QgbGlrZSB0byBoaWdobGlnaHQKLQkgKiBAcGFyYW0Jc3RyaW5nCXRoZSBvcGVuZ2luZyB0YWcgdG8gcHJlY2VkZSB0aGUgcGhyYXNlIHdpdGgKLQkgKiBAcGFyYW0Jc3RyaW5nCXRoZSBjbG9zaW5nIHRhZyB0byBlbmQgdGhlIHBocmFzZSB3aXRoCisJICogQHBhcmFtCXN0cmluZwkkc3RyCQl0aGUgdGV4dCBzdHJpbmcKKwkgKiBAcGFyYW0Jc3RyaW5nCSRwaHJhc2UJCXRoZSBwaHJhc2UgeW91J2QgbGlrZSB0byBoaWdobGlnaHQKKwkgKiBAcGFyYW0Jc3RyaW5nCSR0YWdfb3Blbgl0aGUgb3BlbmdpbmcgdGFnIHRvIHByZWNlZGUgdGhlIHBocmFzZSB3aXRoCisJICogQHBhcmFtCXN0cmluZwkkdGFnX2Nsb3NlCXRoZSBjbG9zaW5nIHRhZyB0byBlbmQgdGhlIHBocmFzZSB3aXRoCiAJICogQHJldHVybglzdHJpbmcKIAkgKi8KLQlmdW5jdGlvbiBoaWdobGlnaHRfcGhyYXNlKCRzdHIsICRwaHJhc2UsICR0YWdfb3BlbiA9ICc8c3Ryb25nPicsICR0YWdfY2xvc2UgPSAnPC9zdHJvbmc+JykKKwlmdW5jdGlvbiBoaWdobGlnaHRfcGhyYXNlKCRzdHIsICRwaHJhc2UsICR0YWdfb3BlbiA9ICc8bWFyaz4nLCAkdGFnX2Nsb3NlID0gJzwvbWFyaz4nKQogCXsKLQkJaWYgKCRzdHIgPT09ICcnKQotCQl7Ci0JCQlyZXR1cm4gJyc7Ci0JCX0KLQotCQlpZiAoJHBocmFzZSAhPT0gJycpCi0JCXsKLQkJCXJldHVybiBwcmVnX3JlcGxhY2UoJy8oJy5wcmVnX3F1b3RlKCRwaHJhc2UsICcvJykuJykvaScsICR0YWdfb3Blbi4nXFwxJy4kdGFnX2Nsb3NlLCAkc3RyKTsKLQkJfQotCi0JCXJldHVybiAkc3RyOworCQlyZXR1cm4gKCRzdHIgIT09ICcnICYmICRwaHJhc2UgIT09ICcnKQorCQkJPyBwcmVnX3JlcGxhY2UoJy8oJy5wcmVnX3F1b3RlKCRwaHJhc2UsICcvJykuJykvaScsICR0YWdfb3Blbi4nXFwxJy4kdGFnX2Nsb3NlLCAkc3RyKQorCQkJOiAkc3RyOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2hlbHBlcnMvdXJsX2hlbHBlci5waHAgYi9zeXN0ZW0vaGVscGVycy91cmxfaGVscGVyLnBocAppbmRleCBmYmI0YTFiLi5mOTY1MGNkIDEwMDY0NAotLS0gYS9zeXN0ZW0vaGVscGVycy91cmxfaGVscGVyLnBocAorKysgYi9zeXN0ZW0vaGVscGVycy91cmxfaGVscGVyLnBocApAQCAtNTIsMTQgKzUyLDcgQEAKIAkgKi8KIAlmdW5jdGlvbiBzaXRlX3VybCgkdXJpID0gJycsICRwcm90b2NvbCA9IE5VTEwpCiAJewotCQkkdXJpID0gZ2V0X2luc3RhbmNlKCktPmNvbmZpZy0+c2l0ZV91cmwoJHVyaSk7Ci0KLQkJaWYgKGlzc2V0KCRwcm90b2NvbCkpCi0JCXsKLQkJCXJldHVybiAkcHJvdG9jb2wuc3Vic3RyKCR1cmksIHN0cnBvcygkdXJpLCAnOi8vJykpOwotCQl9Ci0KLQkJcmV0dXJuICR1cmk7CisJCXJldHVybiBnZXRfaW5zdGFuY2UoKS0+Y29uZmlnLT5zaXRlX3VybCgkdXJpLCAkcHJvdG9jb2wpOwogCX0KIH0KIApAQCAtODAsMTQgKzczLDcgQEAKIAkgKi8KIAlmdW5jdGlvbiBiYXNlX3VybCgkdXJpID0gJycsICRwcm90b2NvbCA9IE5VTEwpCiAJewotCQkkdXJpID0gZ2V0X2luc3RhbmNlKCktPmNvbmZpZy0+YmFzZV91cmwoJHVyaSk7Ci0KLQkJaWYgKGlzc2V0KCRwcm90b2NvbCkpCi0JCXsKLQkJCXJldHVybiAkcHJvdG9jb2wuc3Vic3RyKCR1cmksIHN0cnBvcygkdXJpLCAnOi8vJykpOwotCQl9Ci0KLQkJcmV0dXJuICR1cmk7CisJCXJldHVybiBnZXRfaW5zdGFuY2UoKS0+Y29uZmlnLT5iYXNlX3VybCgkdXJpLCAkcHJvdG9jb2wpOwogCX0KIH0KIApAQCAtMTIzLDggKzEwOSw3IEBACiAJICovCiAJZnVuY3Rpb24gdXJpX3N0cmluZygpCiAJewotCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7Ci0JCXJldHVybiAkQ0ktPnVyaS0+dXJpX3N0cmluZygpOworCQlyZXR1cm4gZ2V0X2luc3RhbmNlKCktPnVyaS0+dXJpX3N0cmluZygpOwogCX0KIH0KIApAQCAtMTQxLDggKzEyNiw3IEBACiAJICovCiAJZnVuY3Rpb24gaW5kZXhfcGFnZSgpCiAJewotCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7Ci0JCXJldHVybiAkQ0ktPmNvbmZpZy0+aXRlbSgnaW5kZXhfcGFnZScpOworCQlyZXR1cm4gZ2V0X2luc3RhbmNlKCktPmNvbmZpZy0+aXRlbSgnaW5kZXhfcGFnZScpOwogCX0KIH0KIApAQCAtNTQ4LDExICs1MzIsMTYgQEAKIAkJfQogCQllbHNlaWYgKCRtZXRob2QgIT09ICdyZWZyZXNoJyAmJiAoZW1wdHkoJGNvZGUpIE9SICEgaXNfbnVtZXJpYygkY29kZSkpKQogCQl7Ci0JCQkvLyBSZWZlcmVuY2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG9zdC9SZWRpcmVjdC9HZXQKLQkJCSRjb2RlID0gKGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddLCAkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10pCi0JCQkJCSYmICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09PSAnUE9TVCcKLQkJCQkJJiYgJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddID09PSAnSFRUUC8xLjEnKQotCQkJCT8gMzAzIDogMzAyOworCQkJaWYgKGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSwgJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pICYmICRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSA9PT0gJ0hUVFAvMS4xJykKKwkJCXsKKwkJCQkkY29kZSA9ICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSAhPT0gJ0dFVCcpCisJCQkJCT8gMzAzCS8vIHJlZmVyZW5jZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3N0L1JlZGlyZWN0L0dldAorCQkJCQk6IDMwNzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkY29kZSA9IDMwMjsKKwkJCX0KIAkJfQogCiAJCXN3aXRjaCAoJG1ldGhvZCkKZGlmZiAtLWdpdCBhL3N5c3RlbS9sYW5ndWFnZS9lbmdsaXNoL2Z0cF9sYW5nLnBocCBiL3N5c3RlbS9sYW5ndWFnZS9lbmdsaXNoL2Z0cF9sYW5nLnBocAppbmRleCBhZTQwODZmLi4wNDJhYjU1IDEwMDY0NAotLS0gYS9zeXN0ZW0vbGFuZ3VhZ2UvZW5nbGlzaC9mdHBfbGFuZy5waHAKKysrIGIvc3lzdGVtL2xhbmd1YWdlL2VuZ2xpc2gvZnRwX2xhbmcucGhwCkBAIC0yNiwxOCArMjYsMTggQEAKICAqLwogZGVmaW5lZCgnQkFTRVBBVEgnKSBPUiBleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7CiAKLSRsYW5nWydmdHBfbm9fY29ubmVjdGlvbiddCQkJPSAnVW5hYmxlIHRvIGxvY2F0ZSBhIHZhbGlkIGNvbm5lY3Rpb24gSUQuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSBjb25uZWN0ZWQgYmVmb3JlIHBlZm9ybWluZyBhbnkgZmlsZSByb3V0aW5lcy4nOworJGxhbmdbJ2Z0cF9ub19jb25uZWN0aW9uJ10JCT0gJ1VuYWJsZSB0byBsb2NhdGUgYSB2YWxpZCBjb25uZWN0aW9uIElELiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgY29ubmVjdGVkIGJlZm9yZSBwZWZvcm1pbmcgYW55IGZpbGUgcm91dGluZXMuJzsKICRsYW5nWydmdHBfdW5hYmxlX3RvX2Nvbm5lY3QnXQkJPSAnVW5hYmxlIHRvIGNvbm5lY3QgdG8geW91ciBGVFAgc2VydmVyIHVzaW5nIHRoZSBzdXBwbGllZCBob3N0bmFtZS4nOwogJGxhbmdbJ2Z0cF91bmFibGVfdG9fbG9naW4nXQkJPSAnVW5hYmxlIHRvIGxvZ2luIHRvIHlvdXIgRlRQIHNlcnZlci4gUGxlYXNlIGNoZWNrIHlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLic7Ci0kbGFuZ1snZnRwX3VuYWJsZV90b19tYWtkaXInXQkJPSAnVW5hYmxlIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHlvdSBoYXZlIHNwZWNpZmllZC4nOworJGxhbmdbJ2Z0cF91bmFibGVfdG9fbWtkaXInXQkJPSAnVW5hYmxlIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHlvdSBoYXZlIHNwZWNpZmllZC4nOwogJGxhbmdbJ2Z0cF91bmFibGVfdG9fY2hhbmdlZGlyJ10JPSAnVW5hYmxlIHRvIGNoYW5nZSBkaXJlY3Rvcmllcy4nOwotJGxhbmdbJ2Z0cF91bmFibGVfdG9fY2htb2QnXQkJPSAnVW5hYmxlIHRvIHNldCBmaWxlIHBlcm1pc3Npb25zLiBQbGVhc2UgY2hlY2sgeW91ciBwYXRoLiBOb3RlOiBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgaW4gUEhQIDUgb3IgaGlnaGVyLic7CiskbGFuZ1snZnRwX3VuYWJsZV90b19jaG1vZCddCQk9ICdVbmFibGUgdG8gc2V0IGZpbGUgcGVybWlzc2lvbnMuIFBsZWFzZSBjaGVjayB5b3VyIHBhdGguJzsKICRsYW5nWydmdHBfdW5hYmxlX3RvX3VwbG9hZCddCQk9ICdVbmFibGUgdG8gdXBsb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gUGxlYXNlIGNoZWNrIHlvdXIgcGF0aC4nOwogJGxhbmdbJ2Z0cF91bmFibGVfdG9fZG93bmxvYWQnXQkJPSAnVW5hYmxlIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gUGxlYXNlIGNoZWNrIHlvdXIgcGF0aC4nOwotJGxhbmdbJ2Z0cF9ub19zb3VyY2VfZmlsZSddCQkJPSAnVW5hYmxlIHRvIGxvY2F0ZSB0aGUgc291cmNlIGZpbGUuIFBsZWFzZSBjaGVjayB5b3VyIHBhdGguJzsKKyRsYW5nWydmdHBfbm9fc291cmNlX2ZpbGUnXQkJPSAnVW5hYmxlIHRvIGxvY2F0ZSB0aGUgc291cmNlIGZpbGUuIFBsZWFzZSBjaGVjayB5b3VyIHBhdGguJzsKICRsYW5nWydmdHBfdW5hYmxlX3RvX3JlbmFtZSddCQk9ICdVbmFibGUgdG8gcmVuYW1lIHRoZSBmaWxlLic7CiAkbGFuZ1snZnRwX3VuYWJsZV90b19kZWxldGUnXQkJPSAnVW5hYmxlIHRvIGRlbGV0ZSB0aGUgZmlsZS4nOwotJGxhbmdbJ2Z0cF91bmFibGVfdG9fbW92ZSddCQkJPSAnVW5hYmxlIHRvIG1vdmUgdGhlIGZpbGUuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMuJzsKKyRsYW5nWydmdHBfdW5hYmxlX3RvX21vdmUnXQkJPSAnVW5hYmxlIHRvIG1vdmUgdGhlIGZpbGUuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMuJzsKIAogLyogRW5kIG9mIGZpbGUgZnRwX2xhbmcucGhwICovCiAvKiBMb2NhdGlvbjogLi9zeXN0ZW0vbGFuZ3VhZ2UvZW5nbGlzaC9mdHBfbGFuZy5waHAgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL0NhY2hlLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvQ2FjaGUucGhwCmluZGV4IGUxMDg5ZjcuLjJkZmZhMzUgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvQ2FjaGUucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvQ2FjaGUucGhwCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogCQlpc3NldCgkY29uZmlnWydrZXlfcHJlZml4J10pICYmICR0aGlzLT5rZXlfcHJlZml4ID0gJGNvbmZpZ1sna2V5X3ByZWZpeCddOwogCi0JCWlmIChpc3NldCgkY29uZmlnWydiYWNrdXAnXSkgJiYgaW5fYXJyYXkoJ2NhY2hlXycuJGNvbmZpZ1snYmFja3VwJ10sICR0aGlzLT52YWxpZF9kcml2ZXJzKSkKKwkJaWYgKGlzc2V0KCRjb25maWdbJ2JhY2t1cCddKSAmJiBpbl9hcnJheSgkY29uZmlnWydiYWNrdXAnXSwgJHRoaXMtPnZhbGlkX2RyaXZlcnMpKQogCQl7CiAJCQkkdGhpcy0+X2JhY2t1cF9kcml2ZXIgPSAkY29uZmlnWydiYWNrdXAnXTsKIAkJfQpAQCAtMTIzLDYgKzEyMyw3IEBACiAJCQllbHNlCiAJCQl7CiAJCQkJLy8gQmFja3VwIGlzIHN1cHBvcnRlZC4gU2V0IGl0IHRvIHByaW1hcnkuCisJCQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ0NhY2hlIGFkYXB0ZXIgIicuJHRoaXMtPl9hZGFwdGVyLiciIGlzIHVuYXZhaWxhYmxlLiBGYWxsaW5nIGJhY2sgdG8gIicuJHRoaXMtPl9iYWNrdXBfZHJpdmVyLiciIGJhY2t1cCBhZGFwdGVyLicpOwogCQkJCSR0aGlzLT5fYWRhcHRlciA9ICR0aGlzLT5fYmFja3VwX2RyaXZlcjsKIAkJCX0KIAkJfQpAQCAtMTQ5LDE0ICsxNTAsMTUgQEAKIAkvKioKIAkgKiBDYWNoZSBTYXZlCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCSRpZAkJQ2FjaGUgSUQKLQkgKiBAcGFyYW0JbWl4ZWQJJGRhdGEJCURhdGEgdG8gc3RvcmUKLQkgKiBAcGFyYW0JaW50CSR0dGwgPSA2MAlDYWNoZSBUVEwgKGluIHNlY29uZHMpCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JbWl4ZWQJJGRhdGEJRGF0YSB0byBzdG9yZQorCSAqIEBwYXJhbQlpbnQJJHR0bAlDYWNoZSBUVEwgKGluIHNlY29uZHMpCisJICogQHBhcmFtCWJvb2wJJHJhdwlXaGV0aGVyIHRvIHN0b3JlIHRoZSByYXcgdmFsdWUKIAkgKiBAcmV0dXJuCWJvb2wJVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHNhdmUoJGlkLCAkZGF0YSwgJHR0bCA9IDYwKQorCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCRpZCwgJGRhdGEsICR0dGwgPSA2MCwgJHJhdyA9IEZBTFNFKQogCXsKLQkJcmV0dXJuICR0aGlzLT57JHRoaXMtPl9hZGFwdGVyfS0+c2F2ZSgkdGhpcy0+a2V5X3ByZWZpeC4kaWQsICRkYXRhLCAkdHRsKTsKKwkJcmV0dXJuICR0aGlzLT57JHRoaXMtPl9hZGFwdGVyfS0+c2F2ZSgkdGhpcy0+a2V5X3ByZWZpeC4kaWQsICRkYXRhLCAkdHRsLCAkcmF3KTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE3NSw2ICsxNzcsMzQgQEAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCS8qKgorCSAqIEluY3JlbWVudCBhIHJhdyB2YWx1ZQorCSAqCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JaW50CSRvZmZzZXQJU3RlcC92YWx1ZSB0byBhZGQKKwkgKiBAcmV0dXJuCW1peGVkCU5ldyB2YWx1ZSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gaW5jcmVtZW50KCRpZCwgJG9mZnNldCA9IDEpCisJeworCQlyZXR1cm4gJHRoaXMtPnskdGhpcy0+X2FkYXB0ZXJ9LT5pbmNyZW1lbnQoJGlkLCAkb2Zmc2V0KTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgorCSAqIERlY3JlbWVudCBhIHJhdyB2YWx1ZQorCSAqCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JaW50CSRvZmZzZXQJU3RlcC92YWx1ZSB0byByZWR1Y2UgYnkKKwkgKiBAcmV0dXJuCW1peGVkCU5ldyB2YWx1ZSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZGVjcmVtZW50KCRpZCwgJG9mZnNldCA9IDEpCisJeworCQlyZXR1cm4gJHRoaXMtPnskdGhpcy0+X2FkYXB0ZXJ9LT5kZWNyZW1lbnQoJGlkLCAkb2Zmc2V0KTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgogCSAqIENsZWFuIHRoZSBjYWNoZQogCSAqCiAJICogQHJldHVybglib29sCVRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZmFpbHVyZQpkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9DYWNoZS9kcml2ZXJzL0NhY2hlX2FwYy5waHAgYi9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfYXBjLnBocAppbmRleCAxMjdhMjIwLi5iNTM4MWRkIDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfYXBjLnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfYXBjLnBocApAQCAtNTEsOCArNTEsMTQgQEAKIAkJJHN1Y2Nlc3MgPSBGQUxTRTsKIAkJJGRhdGEgPSBhcGNfZmV0Y2goJGlkLCAkc3VjY2Vzcyk7CiAKLQkJcmV0dXJuICgkc3VjY2VzcyA9PT0gVFJVRSAmJiBpc19hcnJheSgkZGF0YSkpCi0JCQk/IHVuc2VyaWFsaXplKCRkYXRhWzBdKSA6IEZBTFNFOworCQlpZiAoJHN1Y2Nlc3MgPT09IFRSVUUpCisJCXsKKwkJCXJldHVybiBpc19hcnJheSgkZGF0YSkKKwkJCQk/IHVuc2VyaWFsaXplKCRkYXRhWzBdKQorCQkJCTogJGRhdGE7CisJCX0KKworCQlyZXR1cm4gRkFMU0U7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MCwxNiArNjYsMjEgQEAKIAkvKioKIAkgKiBDYWNoZSBTYXZlCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCVVuaXF1ZSBLZXkKLQkgKiBAcGFyYW0JbWl4ZWQJRGF0YSB0byBzdG9yZQotCSAqIEBwYXJhbQlpbnQJTGVuZ3RoIG9mIHRpbWUgKGluIHNlY29uZHMpIHRvIGNhY2hlIHRoZSBkYXRhCi0JICoKLQkgKiBAcmV0dXJuCWJvb2wJdHJ1ZSBvbiBzdWNjZXNzL2ZhbHNlIG9uIGZhaWx1cmUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEBwYXJhbQltaXhlZAkkZGF0YQlEYXRhIHRvIHN0b3JlCisJICogQHBhcmFtCWludAkkdHRvbAlMZW5ndGggb2YgdGltZSAoaW4gc2Vjb25kcykgdG8gY2FjaGUgdGhlIGRhdGEKKwkgKiBAcGFyYW0JYm9vbAkkcmF3CVdoZXRoZXIgdG8gc3RvcmUgdGhlIHJhdyB2YWx1ZQorCSAqIEByZXR1cm4JYm9vbAlUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkaWQsICRkYXRhLCAkdHRsID0gNjApCisJcHVibGljIGZ1bmN0aW9uIHNhdmUoJGlkLCAkZGF0YSwgJHR0bCA9IDYwLCAkcmF3ID0gRkFMU0UpCiAJewogCQkkdHRsID0gKGludCkgJHR0bDsKLQkJcmV0dXJuIGFwY19zdG9yZSgkaWQsIGFycmF5KHNlcmlhbGl6ZSgkZGF0YSksIHRpbWUoKSwgJHR0bCksICR0dGwpOworCisJCXJldHVybiBhcGNfc3RvcmUoCisJCQkkaWQsCisJCQkoJHJhdyA9PT0gVFJVRSA/ICRkYXRhIDogYXJyYXkoc2VyaWFsaXplKCRkYXRhKSwgdGltZSgpLCAkdHRsKSksCisJCQkkdHRsCisJCSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04OCw2ICs5OSwzNCBAQAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJLyoqCisJICogSW5jcmVtZW50IGEgcmF3IHZhbHVlCisJICoKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEBwYXJhbQlpbnQJJG9mZnNldAlTdGVwL3ZhbHVlIHRvIGFkZAorCSAqIEByZXR1cm4JbWl4ZWQJTmV3IHZhbHVlIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBpbmNyZW1lbnQoJGlkLCAkb2Zmc2V0ID0gMSkKKwl7CisJCXJldHVybiBhcGNfaW5jKCRpZCwgJG9mZnNldCk7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBEZWNyZW1lbnQgYSByYXcgdmFsdWUKKwkgKgorCSAqIEBwYXJhbQlzdHJpbmcJJGlkCUNhY2hlIElECisJICogQHBhcmFtCWludAkkb2Zmc2V0CVN0ZXAvdmFsdWUgdG8gcmVkdWNlIGJ5CisJICogQHJldHVybgltaXhlZAlOZXcgdmFsdWUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGRlY3JlbWVudCgkaWQsICRvZmZzZXQgPSAxKQorCXsKKwkJcmV0dXJuIGFwY19kZWMoJGlkLCAkb2Zmc2V0KTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgogCSAqIENsZWFuIHRoZSBjYWNoZQogCSAqCiAJICogQHJldHVybglib29sCWZhbHNlIG9uIGZhaWx1cmUvdHJ1ZSBvbiBzdWNjZXNzCkBAIC0xNTAsNyArMTg5LDcgQEAKIAl7CiAJCWlmICggISBleHRlbnNpb25fbG9hZGVkKCdhcGMnKSBPUiAhIChib29sKSBAaW5pX2dldCgnYXBjLmVuYWJsZWQnKSkKIAkJewotCQkJbG9nX21lc3NhZ2UoJ2Vycm9yJywgJ1RoZSBBUEMgUEhQIGV4dGVuc2lvbiBtdXN0IGJlIGxvYWRlZCB0byB1c2UgQVBDIENhY2hlLicpOworCQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ1RoZSBBUEMgUEhQIGV4dGVuc2lvbiBtdXN0IGJlIGxvYWRlZCB0byB1c2UgQVBDIENhY2hlLicpOwogCQkJcmV0dXJuIEZBTFNFOwogCQl9CiAKZGlmZiAtLWdpdCBhL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9kdW1teS5waHAgYi9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfZHVtbXkucGhwCmluZGV4IGQ5YWYzNzcuLjdlMmI5MDcgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9kdW1teS5waHAKKysrIGIvc3lzdGVtL2xpYnJhcmllcy9DYWNoZS9kcml2ZXJzL0NhY2hlX2R1bW15LnBocApAQCAtNTgsOSArNTgsMTAgQEAKIAkgKiBAcGFyYW0Jc3RyaW5nCVVuaXF1ZSBLZXkKIAkgKiBAcGFyYW0JbWl4ZWQJRGF0YSB0byBzdG9yZQogCSAqIEBwYXJhbQlpbnQJTGVuZ3RoIG9mIHRpbWUgKGluIHNlY29uZHMpIHRvIGNhY2hlIHRoZSBkYXRhCisJICogQHBhcmFtCWJvb2wJV2hldGhlciB0byBzdG9yZSB0aGUgcmF3IHZhbHVlCiAJICogQHJldHVybglib29sCVRSVUUsIFNpbXVsYXRpbmcgc3VjY2VzcwogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCRpZCwgJGRhdGEsICR0dGwgPSA2MCkKKwlwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkaWQsICRkYXRhLCAkdHRsID0gNjAsICRyYXcgPSBGQUxTRSkKIAl7CiAJCXJldHVybiBUUlVFOwogCX0KQEAgLTgxLDYgKzgyLDM0IEBACiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkvKioKKwkgKiBJbmNyZW1lbnQgYSByYXcgdmFsdWUKKwkgKgorCSAqIEBwYXJhbQlzdHJpbmcJJGlkCUNhY2hlIElECisJICogQHBhcmFtCWludAkkb2Zmc2V0CVN0ZXAvdmFsdWUgdG8gYWRkCisJICogQHJldHVybgltaXhlZAlOZXcgdmFsdWUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGluY3JlbWVudCgkaWQsICRvZmZzZXQgPSAxKQorCXsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBEZWNyZW1lbnQgYSByYXcgdmFsdWUKKwkgKgorCSAqIEBwYXJhbQlzdHJpbmcJJGlkCUNhY2hlIElECisJICogQHBhcmFtCWludAkkb2Zmc2V0CVN0ZXAvdmFsdWUgdG8gcmVkdWNlIGJ5CisJICogQHJldHVybgltaXhlZAlOZXcgdmFsdWUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGRlY3JlbWVudCgkaWQsICRvZmZzZXQgPSAxKQorCXsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKIAkgKiBDbGVhbiB0aGUgY2FjaGUKIAkgKgogCSAqIEByZXR1cm4JYm9vbAlUUlVFLCBzaW11bGF0aW5nIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9maWxlLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9maWxlLnBocAppbmRleCA3NjliZDVhLi44Yzk5YzVlIDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfZmlsZS5waHAKKysrIGIvc3lzdGVtL2xpYnJhcmllcy9DYWNoZS9kcml2ZXJzL0NhY2hlX2ZpbGUucGhwCkBAIC02MiwyNSArNjIsMTMgQEAKIAkvKioKIAkgKiBGZXRjaCBmcm9tIGNhY2hlCiAJICoKLQkgKiBAcGFyYW0JbWl4ZWQJdW5pcXVlIGtleSBpZAotCSAqIEByZXR1cm4JbWl4ZWQJZGF0YSBvbiBzdWNjZXNzL2ZhbHNlIG9uIGZhaWx1cmUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEByZXR1cm4JbWl4ZWQJRGF0YSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGdldCgkaWQpCiAJewotCQlpZiAoICEgZmlsZV9leGlzdHMoJHRoaXMtPl9jYWNoZV9wYXRoLiRpZCkpCi0JCXsKLQkJCXJldHVybiBGQUxTRTsKLQkJfQotCi0JCSRkYXRhID0gdW5zZXJpYWxpemUoZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPl9jYWNoZV9wYXRoLiRpZCkpOwotCi0JCWlmICgkZGF0YVsndHRsJ10gPiAwICYmIHRpbWUoKSA+ICRkYXRhWyd0aW1lJ10gKyAkZGF0YVsndHRsJ10pCi0JCXsKLQkJCXVubGluaygkdGhpcy0+X2NhY2hlX3BhdGguJGlkKTsKLQkJCXJldHVybiBGQUxTRTsKLQkJfQotCi0JCXJldHVybiAkZGF0YVsnZGF0YSddOworCQkkZGF0YSA9ICR0aGlzLT5fZ2V0KCRpZCk7CisJCXJldHVybiBpc19hcnJheSgkZGF0YSkgPyAkZGF0YVsnZGF0YSddIDogRkFMU0U7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04OCwxMyArNzYsMTMgQEAKIAkvKioKIAkgKiBTYXZlIGludG8gY2FjaGUKIAkgKgotCSAqIEBwYXJhbQlzdHJpbmcJdW5pcXVlIGtleQotCSAqIEBwYXJhbQltaXhlZAlkYXRhIHRvIHN0b3JlCi0JICogQHBhcmFtCWludAlsZW5ndGggb2YgdGltZSAoaW4gc2Vjb25kcykgdGhlIGNhY2hlIGlzIHZhbGlkCi0JICoJCQkJLSBEZWZhdWx0IGlzIDYwIHNlY29uZHMKLQkgKiBAcmV0dXJuCWJvb2wJdHJ1ZSBvbiBzdWNjZXNzL2ZhbHNlIG9uIGZhaWx1cmUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEBwYXJhbQltaXhlZAkkZGF0YQlEYXRhIHRvIHN0b3JlCisJICogQHBhcmFtCWludAkkdHRsCVRpbWUgdG8gbGl2ZSBpbiBzZWNvbmRzCisJICogQHBhcmFtCWJvb2wJJHJhdwlXaGV0aGVyIHRvIHN0b3JlIHRoZSByYXcgdmFsdWUgKHVudXNlZCkKKwkgKiBAcmV0dXJuCWJvb2wJVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHNhdmUoJGlkLCAkZGF0YSwgJHR0bCA9IDYwKQorCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCRpZCwgJGRhdGEsICR0dGwgPSA2MCwgJHJhdyA9IEZBTFNFKQogCXsKIAkJJGNvbnRlbnRzID0gYXJyYXkoCiAJCQkndGltZScJCT0+IHRpbWUoKSwKQEAgLTEyNyw2ICsxMTUsNTQgQEAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCS8qKgorCSAqIEluY3JlbWVudCBhIHJhdyB2YWx1ZQorCSAqCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JaW50CSRvZmZzZXQJU3RlcC92YWx1ZSB0byBhZGQKKwkgKiBAcmV0dXJuCU5ldyB2YWx1ZSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGluY3JlbWVudCgkaWQsICRvZmZzZXQgPSAxKQorCXsKKwkJJGRhdGEgPSAkdGhpcy0+X2dldCgkaWQpOworCisJCWlmICgkZGF0YSA9PT0gRkFMU0UgT1IgISBpc19pbnQoJGRhdGFbJ2RhdGEnXSkpCisJCXsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCisJCSRuZXdfdmFsdWUgPSAkZGF0YVsnZGF0YSddICsgJG9mZnNldDsKKwkJcmV0dXJuICR0aGlzLT5zYXZlKCRpZCwgJG5ld192YWx1ZSwgJGRhdGFbJ3R0bCddKQorCQkJPyAkbmV3X3ZhbHVlCisJCQk6IEZBTFNFOworCX0KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJLyoqCisJICogRGVjcmVtZW50IGEgcmF3IHZhbHVlCisJICoKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEBwYXJhbQlpbnQJJG9mZnNldAlTdGVwL3ZhbHVlIHRvIHJlZHVjZSBieQorCSAqIEByZXR1cm4JTmV3IHZhbHVlIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZGVjcmVtZW50KCRpZCwgJG9mZnNldCA9IDEpCisJeworCQkkZGF0YSA9ICR0aGlzLT5fZ2V0KCRpZCk7CisKKwkJaWYgKCRkYXRhID09PSBGQUxTRSBPUiAhIGlzX2ludCgkZGF0YVsnZGF0YSddKSkKKwkJeworCQkJcmV0dXJuIEZBTFNFOworCQl9CisKKwkJJG5ld192YWx1ZSA9ICRkYXRhWydkYXRhJ10gLSAkb2Zmc2V0OworCQlyZXR1cm4gJHRoaXMtPnNhdmUoJGlkLCAkbmV3X3ZhbHVlLCAkZGF0YVsndHRsJ10pCisJCQk/ICRuZXdfdmFsdWUKKwkJCTogRkFMU0U7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKIAkgKiBDbGVhbiB0aGUgQ2FjaGUKIAkgKgogCSAqIEByZXR1cm4JYm9vbAlmYWxzZSBvbiBmYWlsdXJlL3RydWUgb24gc3VjY2VzcwpAQCAtMjAwLDYgKzIzNiwzNCBAQAogCQlyZXR1cm4gaXNfcmVhbGx5X3dyaXRhYmxlKCR0aGlzLT5fY2FjaGVfcGF0aCk7CiAJfQogCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBHZXQgYWxsIGRhdGEKKwkgKgorCSAqIEludGVybmFsIG1ldGhvZCB0byBnZXQgYWxsIHRoZSByZWxldmFudCBkYXRhIGFib3V0IGEgY2FjaGUgaXRlbQorCSAqCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcmV0dXJuCW1peGVkCURhdGEgYXJyYXkgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCisJICovCisJcHJvdGVjdGVkIGZ1bmN0aW9uIF9nZXQoJGlkKQorCXsKKwkJaWYgKCAhIGZpbGVfZXhpc3RzKCR0aGlzLT5fY2FjaGVfcGF0aC4kaWQpKQorCQl7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKworCQkkZGF0YSA9IHVuc2VyaWFsaXplKGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5fY2FjaGVfcGF0aC4kaWQpKTsKKworCQlpZiAoJGRhdGFbJ3R0bCddID4gMCAmJiB0aW1lKCkgPiAkZGF0YVsndGltZSddICsgJGRhdGFbJ3R0bCddKQorCQl7CisJCQl1bmxpbmsoJHRoaXMtPl9jYWNoZV9wYXRoLiRpZCk7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKworCQlyZXR1cm4gJGRhdGE7CisJfQorCiB9CiAKIC8qIEVuZCBvZiBmaWxlIENhY2hlX2ZpbGUucGhwICovCmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfbWVtY2FjaGVkLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9tZW1jYWNoZWQucGhwCmluZGV4IDM1ZDkxMDQuLmQ1OTg0NzcgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9tZW1jYWNoZWQucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9tZW1jYWNoZWQucGhwCkBAIC02MCwxNCArNjAsMTQgQEAKIAkvKioKIAkgKiBGZXRjaCBmcm9tIGNhY2hlCiAJICoKLQkgKiBAcGFyYW0JbWl4ZWQJdW5pcXVlIGtleSBpZAotCSAqIEByZXR1cm4JbWl4ZWQJZGF0YSBvbiBzdWNjZXNzL2ZhbHNlIG9uIGZhaWx1cmUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEByZXR1cm4JbWl4ZWQJRGF0YSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGdldCgkaWQpCiAJewogCQkkZGF0YSA9ICR0aGlzLT5fbWVtY2FjaGVkLT5nZXQoJGlkKTsKIAotCQlyZXR1cm4gaXNfYXJyYXkoJGRhdGEpID8gJGRhdGFbMF0gOiBGQUxTRTsKKwkJcmV0dXJuIGlzX2FycmF5KCRkYXRhKSA/ICRkYXRhWzBdIDogJGRhdGE7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NSwyMCArNzUsMjYgQEAKIAkvKioKIAkgKiBTYXZlCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCXVuaXF1ZSBpZGVudGlmaWVyCi0JICogQHBhcmFtCW1peGVkCWRhdGEgYmVpbmcgY2FjaGVkCi0JICogQHBhcmFtCWludAl0aW1lIHRvIGxpdmUKLQkgKiBAcmV0dXJuCWJvb2wJdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JbWl4ZWQJJGRhdGEJRGF0YSBiZWluZyBjYWNoZWQKKwkgKiBAcGFyYW0JaW50CSR0dGwJVGltZSB0byBsaXZlCisJICogQHBhcmFtCWJvb2wJJHJhdwlXaGV0aGVyIHRvIHN0b3JlIHRoZSByYXcgdmFsdWUKKwkgKiBAcmV0dXJuCWJvb2wJVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHNhdmUoJGlkLCAkZGF0YSwgJHR0bCA9IDYwKQorCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCRpZCwgJGRhdGEsICR0dGwgPSA2MCwgJHJhdyA9IEZBTFNFKQogCXsKKwkJaWYgKCRyYXcgIT09IFRSVUUpCisJCXsKKwkJCSRkYXRhID0gYXJyYXkoJGRhdGEsIHRpbWUoKSwgJHR0bCk7CisJCX0KKwogCQlpZiAoZ2V0X2NsYXNzKCR0aGlzLT5fbWVtY2FjaGVkKSA9PT0gJ01lbWNhY2hlZCcpCiAJCXsKLQkJCXJldHVybiAkdGhpcy0+X21lbWNhY2hlZC0+c2V0KCRpZCwgYXJyYXkoJGRhdGEsIHRpbWUoKSwgJHR0bCksICR0dGwpOworCQkJcmV0dXJuICR0aGlzLT5fbWVtY2FjaGVkLT5zZXQoJGlkLCAkZGF0YSwgJHR0bCk7CiAJCX0KIAkJZWxzZWlmIChnZXRfY2xhc3MoJHRoaXMtPl9tZW1jYWNoZWQpID09PSAnTWVtY2FjaGUnKQogCQl7Ci0JCQlyZXR1cm4gJHRoaXMtPl9tZW1jYWNoZWQtPnNldCgkaWQsIGFycmF5KCRkYXRhLCB0aW1lKCksICR0dGwpLCAwLCAkdHRsKTsKKwkJCXJldHVybiAkdGhpcy0+X21lbWNhY2hlZC0+c2V0KCRpZCwgJGRhdGEsIDAsICR0dGwpOwogCQl9CiAKIAkJcmV0dXJuIEZBTFNFOwpAQCAtMTEwLDYgKzExNiwzNCBAQAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJLyoqCisJICogSW5jcmVtZW50IGEgcmF3IHZhbHVlCisJICoKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEBwYXJhbQlpbnQJJG9mZnNldAlTdGVwL3ZhbHVlIHRvIGFkZAorCSAqIEByZXR1cm4JbWl4ZWQJTmV3IHZhbHVlIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBpbmNyZW1lbnQoJGlkLCAkb2Zmc2V0ID0gMSkKKwl7CisJCXJldHVybiAkdGhpcy0+X21lbWNhY2hlZC0+aW5jcmVtZW50KCRpZCwgJG9mZnNldCk7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBEZWNyZW1lbnQgYSByYXcgdmFsdWUKKwkgKgorCSAqIEBwYXJhbQlzdHJpbmcJJGlkCUNhY2hlIElECisJICogQHBhcmFtCWludAkkb2Zmc2V0CVN0ZXAvdmFsdWUgdG8gcmVkdWNlIGJ5CisJICogQHJldHVybgltaXhlZAlOZXcgdmFsdWUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGRlY3JlbWVudCgkaWQsICRvZmZzZXQgPSAxKQorCXsKKwkJcmV0dXJuICR0aGlzLT5fbWVtY2FjaGVkLT5kZWNyZW1lbnQoJGlkLCAkb2Zmc2V0KTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgogCSAqIENsZWFuIHRoZSBDYWNoZQogCSAqCiAJICogQHJldHVybglib29sCWZhbHNlIG9uIGZhaWx1cmUvdHJ1ZSBvbiBzdWNjZXNzCkBAIC0yNDAsNyArMjc0LDcgQEAKIAl7CiAJCWlmICggISBleHRlbnNpb25fbG9hZGVkKCdtZW1jYWNoZWQnKSAmJiAhIGV4dGVuc2lvbl9sb2FkZWQoJ21lbWNhY2hlJykpCiAJCXsKLQkJCWxvZ19tZXNzYWdlKCdlcnJvcicsICdUaGUgTWVtY2FjaGVkIEV4dGVuc2lvbiBtdXN0IGJlIGxvYWRlZCB0byB1c2UgTWVtY2FjaGVkIENhY2hlLicpOworCQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ1RoZSBNZW1jYWNoZWQgRXh0ZW5zaW9uIG11c3QgYmUgbG9hZGVkIHRvIHVzZSBNZW1jYWNoZWQgQ2FjaGUuJyk7CiAJCQlyZXR1cm4gRkFMU0U7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9DYWNoZS9kcml2ZXJzL0NhY2hlX3JlZGlzLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV9yZWRpcy5waHAKaW5kZXggNDg0ZjI4NC4uYjZmZGRmMCAxMDA2NDQKLS0tIGEvc3lzdGVtL2xpYnJhcmllcy9DYWNoZS9kcml2ZXJzL0NhY2hlX3JlZGlzLnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfcmVkaXMucGhwCkBAIC00NCw2ICs0NCw3IEBACiAJICogQHZhcglhcnJheQogCSAqLwogCXByb3RlY3RlZCBzdGF0aWMgJF9kZWZhdWx0X2NvbmZpZyA9IGFycmF5KAorCQknc29ja2V0X3R5cGUnID0+ICd0Y3AnLAogCQknaG9zdCcgPT4gJzEyNy4wLjAuMScsCiAJCSdwYXNzd29yZCcgPT4gTlVMTCwKIAkJJ3BvcnQnID0+IDYzNzksCkBAIC02Miw3ICs2Myw3IEBACiAJLyoqCiAJICogR2V0IGNhY2hlCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCUNhY2hlIGtleSBpZGVudGlmaWVyCisJICogQHBhcmFtCXN0cmluZwlDYWNoZSBJRAogCSAqIEByZXR1cm4JbWl4ZWQKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXkpCkBAIC03NSwxNiArNzYsMTcgQEAKIAkvKioKIAkgKiBTYXZlIGNhY2hlCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCUNhY2hlIGtleSBpZGVudGlmaWVyCi0JICogQHBhcmFtCW1peGVkCURhdGEgdG8gc2F2ZQotCSAqIEBwYXJhbQlpbnQJVGltZSB0byBsaXZlCi0JICogQHJldHVybglib29sCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JbWl4ZWQJJGRhdGEJRGF0YSB0byBzYXZlCisJICogQHBhcmFtCWludAkkdHRsCVRpbWUgdG8gbGl2ZSBpbiBzZWNvbmRzCisJICogQHBhcmFtCWJvb2wJJHJhdwlXaGV0aGVyIHRvIHN0b3JlIHRoZSByYXcgdmFsdWUgKHVudXNlZCkKKwkgKiBAcmV0dXJuCWJvb2wJVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHNhdmUoJGtleSwgJHZhbHVlLCAkdHRsID0gTlVMTCkKKwlwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkaWQsICRkYXRhLCAkdHRsID0gNjAsICRyYXcgPSBGQUxTRSkKIAl7CiAJCXJldHVybiAoJHR0bCkKLQkJCT8gJHRoaXMtPl9yZWRpcy0+c2V0ZXgoJGtleSwgJHR0bCwgJHZhbHVlKQotCQkJOiAkdGhpcy0+X3JlZGlzLT5zZXQoJGtleSwgJHZhbHVlKTsKKwkJCT8gJHRoaXMtPl9yZWRpcy0+c2V0ZXgoJGlkLCAkdHRsLCAkZGF0YSkKKwkJCTogJHRoaXMtPl9yZWRpcy0+c2V0KCRpZCwgJGRhdGEpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAzLDYgKzEwNSwzOCBAQAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJLyoqCisJICogSW5jcmVtZW50IGEgcmF3IHZhbHVlCisJICoKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEBwYXJhbQlpbnQJJG9mZnNldAlTdGVwL3ZhbHVlIHRvIGFkZAorCSAqIEByZXR1cm4JbWl4ZWQJTmV3IHZhbHVlIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBpbmNyZW1lbnQoJGlkLCAkb2Zmc2V0ID0gMSkKKwl7CisJCXJldHVybiAkdGhpcy0+X3JlZGlzLT5leGlzdHMoJGlkKQorCQkJPyAkdGhpcy0+X3JlZGlzLT5pbmNyKCRpZCwgJG9mZnNldCkKKwkJCTogRkFMU0U7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBEZWNyZW1lbnQgYSByYXcgdmFsdWUKKwkgKgorCSAqIEBwYXJhbQlzdHJpbmcJJGlkCUNhY2hlIElECisJICogQHBhcmFtCWludAkkb2Zmc2V0CVN0ZXAvdmFsdWUgdG8gcmVkdWNlIGJ5CisJICogQHJldHVybgltaXhlZAlOZXcgdmFsdWUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGRlY3JlbWVudCgkaWQsICRvZmZzZXQgPSAxKQorCXsKKwkJcmV0dXJuICR0aGlzLT5fcmVkaXMtPmV4aXN0cygkaWQpCisJCQk/ICR0aGlzLT5fcmVkaXMtPmRlY3IoJGlkLCAkb2Zmc2V0KQorCQkJOiBGQUxTRTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgogCSAqIENsZWFuIGNhY2hlCiAJICoKIAkgKiBAcmV0dXJuCWJvb2wKQEAgLTE2MywxMiArMTk3LDExIEBACiAJewogCQlpZiAoZXh0ZW5zaW9uX2xvYWRlZCgncmVkaXMnKSkKIAkJewotCQkJJHRoaXMtPl9zZXR1cF9yZWRpcygpOwotCQkJcmV0dXJuIFRSVUU7CisJCQlyZXR1cm4gJHRoaXMtPl9zZXR1cF9yZWRpcygpOwogCQl9CiAJCWVsc2UKIAkJewotCQkJbG9nX21lc3NhZ2UoJ2Vycm9yJywgJ1RoZSBSZWRpcyBleHRlbnNpb24gbXVzdCBiZSBsb2FkZWQgdG8gdXNlIFJlZGlzIGNhY2hlLicpOworCQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ1RoZSBSZWRpcyBleHRlbnNpb24gbXVzdCBiZSBsb2FkZWQgdG8gdXNlIFJlZGlzIGNhY2hlLicpOwogCQkJcmV0dXJuIEZBTFNFOwogCQl9CiAJfQpAQCAtMjAwLDE3ICsyMzMsMzMgQEAKIAogCQl0cnkKIAkJewotCQkJJHRoaXMtPl9yZWRpcy0+Y29ubmVjdCgkY29uZmlnWydob3N0J10sICRjb25maWdbJ3BvcnQnXSwgJGNvbmZpZ1sndGltZW91dCddKTsKKwkJCWlmICgkY29uZmlnWydzb2NrZXRfdHlwZSddID09PSAndW5peCcpCisJCQl7CisJCQkJJHN1Y2Nlc3MgPSAkdGhpcy0+X3JlZGlzLT5jb25uZWN0KCRjb25maWdbJ3NvY2tldCddKTsKKwkJCX0KKwkJCWVsc2UgLy8gdGNwIHNvY2tldAorCQkJeworCQkJCSRzdWNjZXNzID0gJHRoaXMtPl9yZWRpcy0+Y29ubmVjdCgkY29uZmlnWydob3N0J10sICRjb25maWdbJ3BvcnQnXSwgJGNvbmZpZ1sndGltZW91dCddKTsKKwkJCX0KKworCQkJaWYgKCAhICRzdWNjZXNzKQorCQkJeworCQkJCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICdDYWNoZTogUmVkaXMgY29ubmVjdGlvbiByZWZ1c2VkLiBDaGVjayB0aGUgY29uZmlnLicpOworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KIAkJfQogCQljYXRjaCAoUmVkaXNFeGNlcHRpb24gJGUpCiAJCXsKLQkJCXNob3dfZXJyb3IoJ1JlZGlzIGNvbm5lY3Rpb24gcmVmdXNlZC4gJyAuICRlLT5nZXRNZXNzYWdlKCkpOworCQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ0NhY2hlOiBSZWRpcyBjb25uZWN0aW9uIHJlZnVzZWQgKCcuJGUtPmdldE1lc3NhZ2UoKS4nKScpOworCQkJcmV0dXJuIEZBTFNFOwogCQl9CiAKIAkJaWYgKGlzc2V0KCRjb25maWdbJ3Bhc3N3b3JkJ10pKQogCQl7CiAJCQkkdGhpcy0+X3JlZGlzLT5hdXRoKCRjb25maWdbJ3Bhc3N3b3JkJ10pOwogCQl9CisKKwkJcmV0dXJuIFRSVUU7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfd2luY2FjaGUucGhwIGIvc3lzdGVtL2xpYnJhcmllcy9DYWNoZS9kcml2ZXJzL0NhY2hlX3dpbmNhY2hlLnBocAppbmRleCBkNzQ5OTc4Li4yNWMxOGFiIDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL0NhY2hlL2RyaXZlcnMvQ2FjaGVfd2luY2FjaGUucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvQ2FjaGUvZHJpdmVycy9DYWNoZV93aW5jYWNoZS5waHAKQEAgLTQ2LDggKzQ2LDggQEAKIAkgKiBMb29rIGZvciBhIHZhbHVlIGluIHRoZSBjYWNoZS4gSWYgaXQgZXhpc3RzLCByZXR1cm4gdGhlIGRhdGEsCiAJICogaWYgbm90LCByZXR1cm4gRkFMU0UKIAkgKgotCSAqIEBwYXJhbQlzdHJpbmcKLQkgKiBAcmV0dXJuCW1peGVkCXZhbHVlIHRoYXQgaXMgc3RvcmVkL0ZBTFNFIG9uIGZhaWx1cmUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJZGUKKwkgKiBAcmV0dXJuCW1peGVkCVZhbHVlIHRoYXQgaXMgc3RvcmVkL0ZBTFNFIG9uIGZhaWx1cmUKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gZ2V0KCRpZCkKIAl7CkBAIC02MywxMiArNjMsMTMgQEAKIAkvKioKIAkgKiBDYWNoZSBTYXZlCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCVVuaXF1ZSBLZXkKLQkgKiBAcGFyYW0JbWl4ZWQJRGF0YSB0byBzdG9yZQotCSAqIEBwYXJhbQlpbnQJTGVuZ3RoIG9mIHRpbWUgKGluIHNlY29uZHMpIHRvIGNhY2hlIHRoZSBkYXRhCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JbWl4ZWQJJGRhdGEJRGF0YSB0byBzdG9yZQorCSAqIEBwYXJhbQlpbnQJJHR0bAlUaW1lIHRvIGxpdmUgKGluIHNlY29uZHMpCisJICogQHBhcmFtCWJvb2wJJHJhdwlXaGV0aGVyIHRvIHN0b3JlIHRoZSByYXcgdmFsdWUgKHVudXNlZCkKIAkgKiBAcmV0dXJuCWJvb2wJdHJ1ZSBvbiBzdWNjZXNzL2ZhbHNlIG9uIGZhaWx1cmUKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkaWQsICRkYXRhLCAkdHRsID0gNjApCisJcHVibGljIGZ1bmN0aW9uIHNhdmUoJGlkLCAkZGF0YSwgJHR0bCA9IDYwLCAkcmF3ID0gRkFMU0UpCiAJewogCQlyZXR1cm4gd2luY2FjaGVfdWNhY2hlX3NldCgkaWQsICRkYXRhLCAkdHRsKTsKIAl9CkBAIC04OSw2ICs5MCw0MCBAQAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJLyoqCisJICogSW5jcmVtZW50IGEgcmF3IHZhbHVlCisJICoKKwkgKiBAcGFyYW0Jc3RyaW5nCSRpZAlDYWNoZSBJRAorCSAqIEBwYXJhbQlpbnQJJG9mZnNldAlTdGVwL3ZhbHVlIHRvIGFkZAorCSAqIEByZXR1cm4JbWl4ZWQJTmV3IHZhbHVlIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBpbmNyZW1lbnQoJGlkLCAkb2Zmc2V0ID0gMSkKKwl7CisJCSRzdWNjZXNzID0gRkFMU0U7CisJCSR2YWx1ZSA9IHdpbmNhY2hlX3VjYWNoZV9pbmMoJGlkLCAkb2Zmc2V0LCAkc3VjY2Vzcyk7CisKKwkJcmV0dXJuICgkc3VjY2VzcyA9PT0gVFJVRSkgPyAkdmFsdWUgOiBGQUxTRTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgorCSAqIERlY3JlbWVudCBhIHJhdyB2YWx1ZQorCSAqCisJICogQHBhcmFtCXN0cmluZwkkaWQJQ2FjaGUgSUQKKwkgKiBAcGFyYW0JaW50CSRvZmZzZXQJU3RlcC92YWx1ZSB0byByZWR1Y2UgYnkKKwkgKiBAcmV0dXJuCW1peGVkCU5ldyB2YWx1ZSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZGVjcmVtZW50KCRpZCwgJG9mZnNldCA9IDEpCisJeworCQkkc3VjY2VzcyA9IEZBTFNFOworCQkkdmFsdWUgPSB3aW5jYWNoZV91Y2FjaGVfZGVjKCRpZCwgJG9mZnNldCwgJHN1Y2Nlc3MpOworCisJCXJldHVybiAoJHN1Y2Nlc3MgPT09IFRSVUUpID8gJHZhbHVlIDogRkFMU0U7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKIAkgKiBDbGVhbiB0aGUgY2FjaGUKIAkgKgogCSAqIEByZXR1cm4JYm9vbAlmYWxzZSBvbiBmYWlsdXJlL3RydWUgb24gc3VjY2VzcwpAQCAtMTUwLDcgKzE4NSw3IEBACiAJewogCQlpZiAoICEgZXh0ZW5zaW9uX2xvYWRlZCgnd2luY2FjaGUnKSkKIAkJewotCQkJbG9nX21lc3NhZ2UoJ2Vycm9yJywgJ1RoZSBXaW5jYWNoZSBQSFAgZXh0ZW5zaW9uIG11c3QgYmUgbG9hZGVkIHRvIHVzZSBXaW5jYWNoZSBDYWNoZS4nKTsKKwkJCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICdUaGUgV2luY2FjaGUgUEhQIGV4dGVuc2lvbiBtdXN0IGJlIGxvYWRlZCB0byB1c2UgV2luY2FjaGUgQ2FjaGUuJyk7CiAJCQlyZXR1cm4gRkFMU0U7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9DYWxlbmRhci5waHAgYi9zeXN0ZW0vbGlicmFyaWVzL0NhbGVuZGFyLnBocAppbmRleCA5YzY4Yzk0Li5mYzY1OTk5IDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL0NhbGVuZGFyLnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL0NhbGVuZGFyLnBocApAQCAtOTYsNiArOTYsMTMgQEAKIAlwdWJsaWMgJG5leHRfcHJldl91cmwJCT0gJyc7CiAKIAkvKioKKwkgKiBTaG93IGRheXMgb2Ygb3RoZXIgbW9udGhzCisJICoKKwkgKiBAdmFyIGJvb2wKKwkgKi8KKwlwdWJsaWMgJHNob3dfb3RoZXJfZGF5cyA9IEZBTFNFOworCisJLyoqCiAJICogQ2xhc3MgY29uc3RydWN0b3IKIAkgKgogCSAqIExvYWRzIHRoZSBjYWxlbmRhciBsYW5ndWFnZSBmaWxlIGFuZCBzZXRzIHRoZSBkZWZhdWx0IHRpbWUgcmVmZXJlbmNlLgpAQCAtMTQzLDYgKzE1MCwxMiBAQAogCQkJCSR0aGlzLT4ka2V5ID0gJHZhbDsKIAkJCX0KIAkJfQorCisJCS8vIFNldCB0aGUgbmV4dF9wcmV2X3VybCB0byB0aGUgY29udHJvbGxlciBpZiByZXF1aXJlZCBidXQgbm90IGRlZmluZWQKKwkJaWYgKCR0aGlzLT5zaG93X25leHRfcHJldiA9PT0gVFJVRSAmJiBlbXB0eSgkdGhpcy0+bmV4dF9wcmV2X3VybCkpCisJCXsKKwkJCSR0aGlzLT5uZXh0X3ByZXZfdXJsID0gJHRoaXMtPkNJLT5jb25maWctPnNpdGVfdXJsKCR0aGlzLT5DSS0+cm91dGVyLT5jbGFzcy4nLycuJHRoaXMtPkNJLT5yb3V0ZXItPm1ldGhvZCk7CisJCX0KIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjYxLDEwICsyNzQsMTAgQEAKIAogCQkJZm9yICgkaSA9IDA7ICRpIDwgNzsgJGkrKykKIAkJCXsKLQkJCQkkb3V0IC49ICgkaXNfY3VycmVudF9tb250aCA9PT0gVFJVRSAmJiAkZGF5ID09ICRjdXJfZGF5KSA/ICR0aGlzLT50ZW1wWydjYWxfY2VsbF9zdGFydF90b2RheSddIDogJHRoaXMtPnRlbXBbJ2NhbF9jZWxsX3N0YXJ0J107Ci0KIAkJCQlpZiAoJGRheSA+IDAgJiYgJGRheSA8PSAkdG90YWxfZGF5cykKIAkJCQl7CisJCQkJCSRvdXQgLj0gKCRpc19jdXJyZW50X21vbnRoID09PSBUUlVFICYmICRkYXkgPT0gJGN1cl9kYXkpID8gJHRoaXMtPnRlbXBbJ2NhbF9jZWxsX3N0YXJ0X3RvZGF5J10gOiAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfc3RhcnQnXTsKKwogCQkJCQlpZiAoaXNzZXQoJGRhdGFbJGRheV0pKQogCQkJCQl7CiAJCQkJCQkvLyBDZWxscyB3aXRoIGNvbnRlbnQKQEAgLTI3OSwxNCArMjkyLDM0IEBACiAJCQkJCQkJCSR0aGlzLT50ZW1wWydjYWxfY2VsbF9ub19jb250ZW50X3RvZGF5J10gOiAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfbm9fY29udGVudCddOwogCQkJCQkJJG91dCAuPSBzdHJfcmVwbGFjZSgne2RheX0nLCAkZGF5LCAkdGVtcCk7CiAJCQkJCX0KKworCQkJCQkkb3V0IC49ICgkaXNfY3VycmVudF9tb250aCA9PT0gVFJVRSAmJiAkZGF5ID09ICRjdXJfZGF5KSA/ICR0aGlzLT50ZW1wWydjYWxfY2VsbF9lbmRfdG9kYXknXSA6ICR0aGlzLT50ZW1wWydjYWxfY2VsbF9lbmQnXTsKKwkJCQl9CisJCQkJZWxzZWlmICgkdGhpcy0+c2hvd19vdGhlcl9kYXlzID09PSBUUlVFKQorCQkJCXsKKwkJCQkJJG91dCAuPSAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfc3RhcnRfb3RoZXInXTsKKworCQkJCQlpZiAoJGRheSA8PSAwKQorCQkJCQl7CisJCQkJCQkvLyBEYXkgb2YgcHJldmlvdXMgbW9udGgKKwkJCQkJCSRwcmV2X21vbnRoID0gJHRoaXMtPmFkanVzdF9kYXRlKCRtb250aCAtIDEsICR5ZWFyKTsKKwkJCQkJCSRwcmV2X21vbnRoX2RheXMgPSAkdGhpcy0+Z2V0X3RvdGFsX2RheXMoJHByZXZfbW9udGhbJ21vbnRoJ10sICRwcmV2X21vbnRoWyd5ZWFyJ10pOworCQkJCQkJJG91dCAuPSBzdHJfcmVwbGFjZSgne2RheX0nLCAkcHJldl9tb250aF9kYXlzICsgJGRheSwgJHRoaXMtPnRlbXBbJ2NhbF9jZWxsX290aGVyJ10pOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gRGF5IG9mIG5leHQgbW9udGgKKwkJCQkJCSRvdXQgLj0gc3RyX3JlcGxhY2UoJ3tkYXl9JywgJGRheSAtICR0b3RhbF9kYXlzLCAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfb3RoZXInXSk7CisJCQkJCX0KKworCQkJCQkkb3V0IC49ICR0aGlzLT50ZW1wWydjYWxfY2VsbF9lbmRfb3RoZXInXTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJLy8gQmxhbmsgY2VsbHMKLQkJCQkJJG91dCAuPSAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfYmxhbmsnXTsKKwkJCQkJJG91dCAuPSAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfc3RhcnQnXS4kdGhpcy0+dGVtcFsnY2FsX2NlbGxfYmxhbmsnXS4kdGhpcy0+dGVtcFsnY2FsX2NlbGxfZW5kJ107CiAJCQkJfQogCi0JCQkJJG91dCAuPSAoJGlzX2N1cnJlbnRfbW9udGggPT09IFRSVUUgJiYgJGRheSA9PSAkY3VyX2RheSkgPyAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfZW5kX3RvZGF5J10gOiAkdGhpcy0+dGVtcFsnY2FsX2NlbGxfZW5kJ107CiAJCQkJJGRheSsrOwogCQkJfQogCkBAIC00NTcsMTMgKzQ5MCwxNiBAQAogCQkJJ2NhbF9yb3dfc3RhcnQnCQkJCT0+ICc8dHI+JywKIAkJCSdjYWxfY2VsbF9zdGFydCcJCQk9PiAnPHRkPicsCiAJCQknY2FsX2NlbGxfc3RhcnRfdG9kYXknCQk9PiAnPHRkPicsCisJCQknY2FsX2NlbGxfc3RhcnRfb3RoZXInCQk9PiAnPHRkIHN0eWxlPSJjb2xvcjogIzY2NjsiPicsCiAJCQknY2FsX2NlbGxfY29udGVudCcJCQk9PiAnPGEgaHJlZj0ie2NvbnRlbnR9Ij57ZGF5fTwvYT4nLAogCQkJJ2NhbF9jZWxsX2NvbnRlbnRfdG9kYXknCT0+ICc8YSBocmVmPSJ7Y29udGVudH0iPjxzdHJvbmc+e2RheX08L3N0cm9uZz48L2E+JywKIAkJCSdjYWxfY2VsbF9ub19jb250ZW50JwkJPT4gJ3tkYXl9JywKIAkJCSdjYWxfY2VsbF9ub19jb250ZW50X3RvZGF5Jwk9PiAnPHN0cm9uZz57ZGF5fTwvc3Ryb25nPicsCiAJCQknY2FsX2NlbGxfYmxhbmsnCQkJPT4gJyZuYnNwOycsCisJCQknY2FsX2NlbGxfb3RoZXInCQkJPT4gJ3tkYXl9JywKIAkJCSdjYWxfY2VsbF9lbmQnCQkJCT0+ICc8L3RkPicsCiAJCQknY2FsX2NlbGxfZW5kX3RvZGF5JwkJPT4gJzwvdGQ+JywKKwkJCSdjYWxfY2VsbF9lbmRfb3RoZXInCQk9PiAnPC90ZD4nLAogCQkJJ2NhbF9yb3dfZW5kJwkJCQk9PiAnPC90cj4nLAogCQkJJ3RhYmxlX2Nsb3NlJwkJCQk9PiAnPC90YWJsZT4nCiAJCSk7CkBAIC00OTAsNyArNTI2LDcgQEAKIAogCQkkdG9kYXkgPSBhcnJheSgnY2FsX2NlbGxfc3RhcnRfdG9kYXknLCAnY2FsX2NlbGxfY29udGVudF90b2RheScsICdjYWxfY2VsbF9ub19jb250ZW50X3RvZGF5JywgJ2NhbF9jZWxsX2VuZF90b2RheScpOwogCi0JCWZvcmVhY2ggKGFycmF5KCd0YWJsZV9vcGVuJywgJ3RhYmxlX2Nsb3NlJywgJ2hlYWRpbmdfcm93X3N0YXJ0JywgJ2hlYWRpbmdfcHJldmlvdXNfY2VsbCcsICdoZWFkaW5nX3RpdGxlX2NlbGwnLCAnaGVhZGluZ19uZXh0X2NlbGwnLCAnaGVhZGluZ19yb3dfZW5kJywgJ3dlZWtfcm93X3N0YXJ0JywgJ3dlZWtfZGF5X2NlbGwnLCAnd2Vla19yb3dfZW5kJywgJ2NhbF9yb3dfc3RhcnQnLCAnY2FsX2NlbGxfc3RhcnQnLCAnY2FsX2NlbGxfY29udGVudCcsICdjYWxfY2VsbF9ub19jb250ZW50JywgJ2NhbF9jZWxsX2JsYW5rJywgJ2NhbF9jZWxsX2VuZCcsICdjYWxfcm93X2VuZCcsICdjYWxfY2VsbF9zdGFydF90b2RheScsICdjYWxfY2VsbF9jb250ZW50X3RvZGF5JywgJ2NhbF9jZWxsX25vX2NvbnRlbnRfdG9kYXknLCAnY2FsX2NlbGxfZW5kX3RvZGF5JykgYXMgJHZhbCkKKwkJZm9yZWFjaCAoYXJyYXkoJ3RhYmxlX29wZW4nLCAndGFibGVfY2xvc2UnLCAnaGVhZGluZ19yb3dfc3RhcnQnLCAnaGVhZGluZ19wcmV2aW91c19jZWxsJywgJ2hlYWRpbmdfdGl0bGVfY2VsbCcsICdoZWFkaW5nX25leHRfY2VsbCcsICdoZWFkaW5nX3Jvd19lbmQnLCAnd2Vla19yb3dfc3RhcnQnLCAnd2Vla19kYXlfY2VsbCcsICd3ZWVrX3Jvd19lbmQnLCAnY2FsX3Jvd19zdGFydCcsICdjYWxfY2VsbF9zdGFydCcsICdjYWxfY2VsbF9jb250ZW50JywgJ2NhbF9jZWxsX25vX2NvbnRlbnQnLCAnY2FsX2NlbGxfYmxhbmsnLCAnY2FsX2NlbGxfZW5kJywgJ2NhbF9yb3dfZW5kJywgJ2NhbF9jZWxsX3N0YXJ0X3RvZGF5JywgJ2NhbF9jZWxsX2NvbnRlbnRfdG9kYXknLCAnY2FsX2NlbGxfbm9fY29udGVudF90b2RheScsICdjYWxfY2VsbF9lbmRfdG9kYXknLCAnY2FsX2NlbGxfc3RhcnRfb3RoZXInLCAnY2FsX2NlbGxfb3RoZXInLCAnY2FsX2NlbGxfZW5kX290aGVyJykgYXMgJHZhbCkKIAkJewogCQkJaWYgKHByZWdfbWF0Y2goJy9ceycuJHZhbC4nXH0oLio/KVx7XC8nLiR2YWwuJ1x9L3NpJywgJHRoaXMtPnRlbXBsYXRlLCAkbWF0Y2gpKQogCQkJewpkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9FbWFpbC5waHAgYi9zeXN0ZW0vbGlicmFyaWVzL0VtYWlsLnBocAppbmRleCA0NmZmYWExLi5mNGVmZmY4IDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL0VtYWlsLnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL0VtYWlsLnBocApAQCAtMzk5LDkgKzM5OSw5IEBACiAJCWVsc2UKIAkJewogCQkJJHRoaXMtPl9zbXRwX2F1dGggPSAhICgkdGhpcy0+c210cF91c2VyID09PSAnJyAmJiAkdGhpcy0+c210cF9wYXNzID09PSAnJyk7Ci0JCQkkdGhpcy0+X3NhZmVfbW9kZSA9IChib29sKSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiAJCX0KIAorCQkkdGhpcy0+X3NhZmVfbW9kZSA9ICggISBpc19waHAoJzUuNCcpICYmIChib29sKSBAaW5pX2dldCgnc2FmZV9tb2RlJykpOwogCQkkdGhpcy0+Y2hhcnNldCA9IHN0cnRvdXBwZXIoJHRoaXMtPmNoYXJzZXQpOwogCiAJCWxvZ19tZXNzYWdlKCdkZWJ1ZycsICdFbWFpbCBDbGFzcyBJbml0aWFsaXplZCcpOwpAQCAtNDUxLDcgKzQ1MSw2IEBACiAJCSR0aGlzLT5jbGVhcigpOwogCiAJCSR0aGlzLT5fc210cF9hdXRoID0gISAoJHRoaXMtPnNtdHBfdXNlciA9PT0gJycgJiYgJHRoaXMtPnNtdHBfcGFzcyA9PT0gJycpOwotCQkkdGhpcy0+X3NhZmVfbW9kZSA9IChib29sKSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiAKIAkJcmV0dXJuICR0aGlzOwogCX0KQEAgLTcxMSwxOCArNzEwLDQyIEBACiAJLyoqCiAJICogQXNzaWduIGZpbGUgYXR0YWNobWVudHMKIAkgKgotCSAqIEBwYXJhbQlzdHJpbmcJJGZpbGVuYW1lCisJICogQHBhcmFtCXN0cmluZwkkZmlsZQlDYW4gYmUgbG9jYWwgcGF0aCwgVVJMIG9yIGJ1ZmZlcmVkIGNvbnRlbnQKIAkgKiBAcGFyYW0Jc3RyaW5nCSRkaXNwb3NpdGlvbiA9ICdhdHRhY2htZW50JwogCSAqIEBwYXJhbQlzdHJpbmcJJG5ld25hbWUgPSBOVUxMCiAJICogQHBhcmFtCXN0cmluZwkkbWltZSA9ICcnCiAJICogQHJldHVybglDSV9FbWFpbAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBhdHRhY2goJGZpbGVuYW1lLCAkZGlzcG9zaXRpb24gPSAnJywgJG5ld25hbWUgPSBOVUxMLCAkbWltZSA9ICcnKQorCXB1YmxpYyBmdW5jdGlvbiBhdHRhY2goJGZpbGUsICRkaXNwb3NpdGlvbiA9ICcnLCAkbmV3bmFtZSA9IE5VTEwsICRtaW1lID0gJycpCiAJeworCQlpZiAoJG1pbWUgPT09ICcnKQorCQl7CisJCQlpZiAoc3RycG9zKCRmaWxlLCAnOi8vJykgPT09IEZBTFNFICYmICEgZmlsZV9leGlzdHMoJGZpbGUpKQorCQkJeworCQkJCSR0aGlzLT5fc2V0X2Vycm9yX21lc3NhZ2UoJ2xhbmc6ZW1haWxfYXR0YWNobWVudF9taXNzaW5nJywgJGZpbGUpOworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKworCQkJaWYgKCAhICRmcCA9IEBmb3BlbigkZmlsZSwgRk9QRU5fUkVBRCkpCisJCQl7CisJCQkJJHRoaXMtPl9zZXRfZXJyb3JfbWVzc2FnZSgnbGFuZzplbWFpbF9hdHRhY2htZW50X3VucmVhZGFibGUnLCAkZmlsZSk7CisJCQkJcmV0dXJuIEZBTFNFOworCQkJfQorCisJCQkkZmlsZV9jb250ZW50ID0gc3RyZWFtX2dldF9jb250ZW50cygkZnApOworCQkJJG1pbWUgPSAkdGhpcy0+X21pbWVfdHlwZXMocGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOworCQkJZmNsb3NlKCRmcCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkkZmlsZV9jb250ZW50ID0mICRmaWxlOyAvLyBidWZmZXJlZCBmaWxlCisJCX0KKwogCQkkdGhpcy0+X2F0dGFjaG1lbnRzW10gPSBhcnJheSgKLQkJCSduYW1lJwkJPT4gYXJyYXkoJGZpbGVuYW1lLCAkbmV3bmFtZSksCisJCQknbmFtZScJCT0+IGFycmF5KCRmaWxlLCAkbmV3bmFtZSksCiAJCQknZGlzcG9zaXRpb24nCT0+IGVtcHR5KCRkaXNwb3NpdGlvbikgPyAnYXR0YWNobWVudCcgOiAkZGlzcG9zaXRpb24sICAvLyBDYW4gYWxzbyBiZSAnaW5saW5lJyAgTm90IHN1cmUgaWYgaXQgbWF0dGVycwotCQkJJ3R5cGUnIAkJPT4gJG1pbWUKKwkJCSd0eXBlJwkJPT4gJG1pbWUsCisJCQknY29udGVudCcJPT4gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZSgkZmlsZV9jb250ZW50KSkKIAkJKTsKIAogCQlyZXR1cm4gJHRoaXM7CkBAIC03MzEsNiArNzU0LDM1IEBACiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCS8qKgorCSAqIFNldCBhbmQgcmV0dXJuIGF0dGFjaG1lbnQgQ29udGVudC1JRAorCSAqCisJICogVXNlZnVsIGZvciBhdHRhY2hlZCBpbmxpbmUgcGljdHVyZXMKKwkgKgorCSAqIEBwYXJhbQlzdHJpbmcJJGZpbGVuYW1lCisJICogQHJldHVybglzdHJpbmcKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gYXR0YWNobWVudF9jaWQoJGZpbGVuYW1lKQorCXsKKwkJaWYgKCR0aGlzLT5tdWx0aXBhcnQgIT09ICdyZWxhdGVkJykKKwkJeworCQkJJHRoaXMtPm11bHRpcGFydCA9ICdyZWxhdGVkJzsgLy8gVGh1bmRlcmJpcmQgbmVlZCB0aGlzIGZvciBpbmxpbmUgaW1hZ2VzCisJCX0KKworCQlmb3IgKCRpID0gMCwgJGMgPSBjb3VudCgkdGhpcy0+X2F0dGFjaG1lbnRzKTsgJGkgPCAkYzsgJGkrKykKKwkJeworCQkJaWYgKCR0aGlzLT5fYXR0YWNobWVudHNbJGldWyduYW1lJ11bMF0gPT09ICRmaWxlbmFtZSkKKwkJCXsKKwkJCQkkdGhpcy0+X2F0dGFjaG1lbnRzWyRpXVsnY2lkJ10gPSB1bmlxaWQoYmFzZW5hbWUoJHRoaXMtPl9hdHRhY2htZW50c1skaV1bJ25hbWUnXVswXSkuJ0AnKTsKKwkJCQlyZXR1cm4gJHRoaXMtPl9hdHRhY2htZW50c1skaV1bJ2NpZCddOworCQkJfQorCQl9CisKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKIAkgKiBBZGQgYSBIZWFkZXIgSXRlbQogCSAqCiAJICogQHBhcmFtCXN0cmluZwpAQCAtMTI2NSw3ICsxMzE3LDcgQEAKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJJHRoaXMtPl9maW5hbGJvZHkgPSAkaGRyIC4gJHRoaXMtPm5ld2xpbmUgLiAkdGhpcy0+bmV3bGluZSAuICR0aGlzLT5fYm9keTsKKwkJCQkJJHRoaXMtPl9maW5hbGJvZHkgPSAkaGRyLiR0aGlzLT5uZXdsaW5lLiR0aGlzLT5uZXdsaW5lLiR0aGlzLT5fYm9keTsKIAkJCQl9CiAKIAkJCQlyZXR1cm47CkBAIC0xMjc1LDExICsxMzI3LDExIEBACiAJCQkJaWYgKCR0aGlzLT5zZW5kX211bHRpcGFydCA9PT0gRkFMU0UpCiAJCQkJewogCQkJCQkkaGRyIC49ICdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0nLiR0aGlzLT5jaGFyc2V0LiR0aGlzLT5uZXdsaW5lCi0JCQkJCQkuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUnLiR0aGlzLT5uZXdsaW5lLiR0aGlzLT5uZXdsaW5lOworCQkJCQkJLidDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlJzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJJGhkciAuPSAnQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSInLiR0aGlzLT5fYWx0X2JvdW5kYXJ5LiciJy4kdGhpcy0+bmV3bGluZS4kdGhpcy0+bmV3bGluZTsKKwkJCQkJJGhkciAuPSAnQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSInLiR0aGlzLT5fYWx0X2JvdW5kYXJ5LiciJzsKIAogCQkJCQkkYm9keSAuPSAkdGhpcy0+X2dldF9taW1lX21lc3NhZ2UoKS4kdGhpcy0+bmV3bGluZS4kdGhpcy0+bmV3bGluZQogCQkJCQkJLictLScuJHRoaXMtPl9hbHRfYm91bmRhcnkuJHRoaXMtPm5ld2xpbmUKQEAgLTEzMDAsNyArMTM1Miw3IEBACiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCSR0aGlzLT5fZmluYWxib2R5ID0gJGhkci4kdGhpcy0+X2ZpbmFsYm9keTsKKwkJCQkJJHRoaXMtPl9maW5hbGJvZHkgPSAkaGRyLiR0aGlzLT5uZXdsaW5lLiR0aGlzLT5uZXdsaW5lLiR0aGlzLT5fZmluYWxib2R5OwogCQkJCX0KIAogCQkJCWlmICgkdGhpcy0+c2VuZF9tdWx0aXBhcnQgIT09IEZBTFNFKQpAQCAtMTMxMiwyNSArMTM2NCwyNSBAQAogCiAJCQljYXNlICdwbGFpbi1hdHRhY2gnIDoKIAotCQkJCSRoZHIgLj0gJ0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0LycuJHRoaXMtPm11bHRpcGFydC4nOyBib3VuZGFyeT0iJy4kdGhpcy0+X2F0Y19ib3VuZGFyeS4nIicuJHRoaXMtPm5ld2xpbmUuJHRoaXMtPm5ld2xpbmU7CisJCQkJJGhkciAuPSAnQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvJy4kdGhpcy0+bXVsdGlwYXJ0Lic7IGJvdW5kYXJ5PSInLiR0aGlzLT5fYXRjX2JvdW5kYXJ5LiciJzsKIAogCQkJCWlmICgkdGhpcy0+X2dldF9wcm90b2NvbCgpID09PSAnbWFpbCcpCiAJCQkJewogCQkJCQkkdGhpcy0+X2hlYWRlcl9zdHIgLj0gJGhkcjsKIAkJCQl9CiAKLQkJCQkkYm9keSAuPSAkdGhpcy0+X2dldF9taW1lX21lc3NhZ2UoKS4kdGhpcy0+bmV3bGluZS4kdGhpcy0+bmV3bGluZQorCQkJCSRib2R5IC49ICR0aGlzLT5fZ2V0X21pbWVfbWVzc2FnZSgpLiR0aGlzLT5uZXdsaW5lCisJCQkJCS4kdGhpcy0+bmV3bGluZQogCQkJCQkuJy0tJy4kdGhpcy0+X2F0Y19ib3VuZGFyeS4kdGhpcy0+bmV3bGluZQotCiAJCQkJCS4nQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PScuJHRoaXMtPmNoYXJzZXQuJHRoaXMtPm5ld2xpbmUKLQkJCQkJLidDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAnLiR0aGlzLT5fZ2V0X2VuY29kaW5nKCkuJHRoaXMtPm5ld2xpbmUuJHRoaXMtPm5ld2xpbmUKLQorCQkJCQkuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICcuJHRoaXMtPl9nZXRfZW5jb2RpbmcoKS4kdGhpcy0+bmV3bGluZQorCQkJCQkuJHRoaXMtPm5ld2xpbmUKIAkJCQkJLiR0aGlzLT5fYm9keS4kdGhpcy0+bmV3bGluZS4kdGhpcy0+bmV3bGluZTsKIAogCQkJYnJlYWs7CiAJCQljYXNlICdodG1sLWF0dGFjaCcgOgogCi0JCQkJJGhkciAuPSAnQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvJy4kdGhpcy0+bXVsdGlwYXJ0Lic7IGJvdW5kYXJ5PSInLiR0aGlzLT5fYXRjX2JvdW5kYXJ5LiciJy4kdGhpcy0+bmV3bGluZS4kdGhpcy0+bmV3bGluZTsKKwkJCQkkaGRyIC49ICdDb250ZW50LVR5cGU6IG11bHRpcGFydC8nLiR0aGlzLT5tdWx0aXBhcnQuJzsgYm91bmRhcnk9IicuJHRoaXMtPl9hdGNfYm91bmRhcnkuJyInOwogCiAJCQkJaWYgKCR0aGlzLT5fZ2V0X3Byb3RvY29sKCkgPT09ICdtYWlsJykKIAkJCQl7CkBAIC0xMzYyLDQ1ICsxNDE0LDIyIEBACiAJCQkkZmlsZW5hbWUgPSAkdGhpcy0+X2F0dGFjaG1lbnRzWyRpXVsnbmFtZSddWzBdOwogCQkJJGJhc2VuYW1lID0gKCR0aGlzLT5fYXR0YWNobWVudHNbJGldWyduYW1lJ11bMV0gPT09IE5VTEwpCiAJCQkJPyBiYXNlbmFtZSgkZmlsZW5hbWUpIDogJHRoaXMtPl9hdHRhY2htZW50c1skaV1bJ25hbWUnXVsxXTsKLQkJCSRjdHlwZSA9ICR0aGlzLT5fYXR0YWNobWVudHNbJGldWyd0eXBlJ107Ci0JCQkkZmlsZV9jb250ZW50ID0gJyc7Ci0KLQkJCWlmICgkY3R5cGUgPT09ICcnKQotCQkJewotCQkJCWlmICggISBmaWxlX2V4aXN0cygkZmlsZW5hbWUpKQotCQkJCXsKLQkJCQkJJHRoaXMtPl9zZXRfZXJyb3JfbWVzc2FnZSgnbGFuZzplbWFpbF9hdHRhY2htZW50X21pc3NpbmcnLCAkZmlsZW5hbWUpOwotCQkJCQlyZXR1cm4gRkFMU0U7Ci0JCQkJfQotCi0JCQkJJGZpbGUgPSBmaWxlc2l6ZSgkZmlsZW5hbWUpICsxOwotCi0JCQkJaWYgKCAhICRmcCA9IGZvcGVuKCRmaWxlbmFtZSwgRk9QRU5fUkVBRCkpCi0JCQkJewotCQkJCQkkdGhpcy0+X3NldF9lcnJvcl9tZXNzYWdlKCdsYW5nOmVtYWlsX2F0dGFjaG1lbnRfdW5yZWFkYWJsZScsICRmaWxlbmFtZSk7Ci0JCQkJCXJldHVybiBGQUxTRTsKLQkJCQl9Ci0KLQkJCQkkY3R5cGUgPSAkdGhpcy0+X21pbWVfdHlwZXMocGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pKTsKLQkJCQkkZmlsZV9jb250ZW50ID0gZnJlYWQoJGZwLCAkZmlsZSk7Ci0JCQkJZmNsb3NlKCRmcCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJJGZpbGVfY29udGVudCA9JiAkdGhpcy0+X2F0dGFjaG1lbnRzWyRpXVsnbmFtZSddWzBdOwotCQkJfQogCiAJCQkkYXR0YWNobWVudFskeisrXSA9ICctLScuJHRoaXMtPl9hdGNfYm91bmRhcnkuJHRoaXMtPm5ld2xpbmUKLQkJCQkuJ0NvbnRlbnQtdHlwZTogJy4kY3R5cGUuJzsgJworCQkJCS4nQ29udGVudC10eXBlOiAnLiR0aGlzLT5fYXR0YWNobWVudHNbJGldWyd0eXBlJ10uJzsgJwogCQkJCS4nbmFtZT0iJy4kYmFzZW5hbWUuJyInLiR0aGlzLT5uZXdsaW5lCiAJCQkJLidDb250ZW50LURpc3Bvc2l0aW9uOiAnLiR0aGlzLT5fYXR0YWNobWVudHNbJGldWydkaXNwb3NpdGlvbiddLic7Jy4kdGhpcy0+bmV3bGluZQotCQkJCS4nQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0Jy4kdGhpcy0+bmV3bGluZTsKKwkJCQkuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NCcuJHRoaXMtPm5ld2xpbmUKKwkJCQkuKGVtcHR5KCR0aGlzLT5fYXR0YWNobWVudHNbJGldWydjaWQnXSkgPyAnJyA6ICdDb250ZW50LUlEOiA8Jy4kdGhpcy0+X2F0dGFjaG1lbnRzWyRpXVsnY2lkJ10uJz4nLiR0aGlzLT5uZXdsaW5lKTsKIAotCQkJJGF0dGFjaG1lbnRbJHorK10gPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKCRmaWxlX2NvbnRlbnQpKTsKKwkJCSRhdHRhY2htZW50WyR6KytdID0gJHRoaXMtPl9hdHRhY2htZW50c1skaV1bJ2NvbnRlbnQnXTsKIAkJfQogCiAJCSRib2R5IC49IGltcGxvZGUoJHRoaXMtPm5ld2xpbmUsICRhdHRhY2htZW50KS4kdGhpcy0+bmV3bGluZS4nLS0nLiR0aGlzLT5fYXRjX2JvdW5kYXJ5LictLSc7Ci0JCSR0aGlzLT5fZmluYWxib2R5ID0gKCR0aGlzLT5fZ2V0X3Byb3RvY29sKCkgPT09ICdtYWlsJykgPyAkYm9keSA6ICRoZHIuJGJvZHk7CisJCSR0aGlzLT5fZmluYWxib2R5ID0gKCR0aGlzLT5fZ2V0X3Byb3RvY29sKCkgPT09ICdtYWlsJykKKwkJCT8gJGJvZHkKKwkJCTogJGhkci4kdGhpcy0+bmV3bGluZS4kdGhpcy0+bmV3bGluZS4kYm9keTsKKwogCQlyZXR1cm4gVFJVRTsKIAl9CiAKQEAgLTIwNjgsNyArMjA5NywxNiBAQAogCSAqLwogCXByb3RlY3RlZCBmdW5jdGlvbiBfc2VuZF9kYXRhKCRkYXRhKQogCXsKLQkJaWYgKCAhIGZ3cml0ZSgkdGhpcy0+X3NtdHBfY29ubmVjdCwgJGRhdGEuJHRoaXMtPm5ld2xpbmUpKQorCQkkZGF0YSAuPSAkdGhpcy0+bmV3bGluZTsKKwkJZm9yICgkd3JpdHRlbiA9IDAsICRsZW5ndGggPSBzdHJsZW4oJGRhdGEpOyAkd3JpdHRlbiA8ICRsZW5ndGg7ICR3cml0dGVuICs9ICRyZXN1bHQpCisJCXsKKwkJCWlmICgoJHJlc3VsdCA9IGZ3cml0ZSgkdGhpcy0+X3NtdHBfY29ubmVjdCwgc3Vic3RyKCRkYXRhLCAkd3JpdHRlbikpKSA9PT0gRkFMU0UpCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoJHJlc3VsdCA9PT0gRkFMU0UpCiAJCXsKIAkJCSR0aGlzLT5fc2V0X2Vycm9yX21lc3NhZ2UoJ2xhbmc6ZW1haWxfc210cF9kYXRhX2ZhaWx1cmUnLCAkZGF0YSk7CiAJCQlyZXR1cm4gRkFMU0U7CmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL0Zvcm1fdmFsaWRhdGlvbi5waHAgYi9zeXN0ZW0vbGlicmFyaWVzL0Zvcm1fdmFsaWRhdGlvbi5waHAKaW5kZXggNDBiYTAxMi4uNTg0ODU5MSAxMDA2NDQKLS0tIGEvc3lzdGVtL2xpYnJhcmllcy9Gb3JtX3ZhbGlkYXRpb24ucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvRm9ybV92YWxpZGF0aW9uLnBocApAQCAtMTQ0LDE0ICsxNDQsMTYgQEAKIAkgKiBTZXQgUnVsZXMKIAkgKgogCSAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgYW5kIHZhbGlkYXRpb24KLQkgKiBydWxlcyBhcyBpbnB1dCwgdmFsaWRhdGVzIHRoZSBpbmZvLCBhbmQgc3RvcmVzIGl0CisJICogcnVsZXMgYXMgaW5wdXQsIGFueSBjdXN0b20gZXJyb3IgbWVzc2FnZXMsIHZhbGlkYXRlcyB0aGUgaW5mbywgCisJICogYW5kIHN0b3JlcyBpdAogCSAqCiAJICogQHBhcmFtCW1peGVkCSRmaWVsZAogCSAqIEBwYXJhbQlzdHJpbmcJJGxhYmVsCiAJICogQHBhcmFtCW1peGVkCSRydWxlcworCSAqIEBwYXJhbQlhcnJheQkkZXJyb3JzCiAJICogQHJldHVybglDSV9Gb3JtX3ZhbGlkYXRpb24KIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gc2V0X3J1bGVzKCRmaWVsZCwgJGxhYmVsID0gJycsICRydWxlcyA9ICcnKQorCXB1YmxpYyBmdW5jdGlvbiBzZXRfcnVsZXMoJGZpZWxkLCAkbGFiZWwgPSAnJywgJHJ1bGVzID0gJycsICRlcnJvcnMgPSBhcnJheSgpKQogCXsKIAkJLy8gTm8gcmVhc29uIHRvIHNldCBydWxlcyBpZiB3ZSBoYXZlIG5vIFBPU1QgZGF0YQogCQkvLyBvciBhIHZhbGlkYXRpb24gYXJyYXkgaGFzIG5vdCBiZWVuIHNwZWNpZmllZApAQCAtMTc1LDggKzE3NywxMSBAQAogCQkJCS8vIElmIHRoZSBmaWVsZCBsYWJlbCB3YXNuJ3QgcGFzc2VkIHdlIHVzZSB0aGUgZmllbGQgbmFtZQogCQkJCSRsYWJlbCA9IGlzc2V0KCRyb3dbJ2xhYmVsJ10pID8gJHJvd1snbGFiZWwnXSA6ICRyb3dbJ2ZpZWxkJ107CiAKKwkJCQkvLyBBZGQgdGhlIGN1c3RvbSBlcnJvciBtZXNzYWdlIGFycmF5CisJCQkJJGVycm9ycyA9IChpc3NldCgkcm93WydlcnJvcnMnXSkgJiYgaXNfYXJyYXkoJHJvd1snZXJyb3JzJ10pKSA/ICRyb3dbJ2Vycm9ycyddIDogYXJyYXkoKTsKKwogCQkJCS8vIEhlcmUgd2UgZ28hCi0JCQkJJHRoaXMtPnNldF9ydWxlcygkcm93WydmaWVsZCddLCAkbGFiZWwsICRyb3dbJ3J1bGVzJ10pOworCQkJCSR0aGlzLT5zZXRfcnVsZXMoJHJvd1snZmllbGQnXSwgJGxhYmVsLCAkcm93WydydWxlcyddLCAkZXJyb3JzKTsKIAkJCX0KIAogCQkJcmV0dXJuICR0aGlzOwpAQCAtMjI0LDYgKzIyOSw3IEBACiAJCQknZmllbGQnCQk9PiAkZmllbGQsCiAJCQknbGFiZWwnCQk9PiAkbGFiZWwsCiAJCQkncnVsZXMnCQk9PiAkcnVsZXMsCisJCQknZXJyb3JzJwk9PiAkZXJyb3JzLAogCQkJJ2lzX2FycmF5Jwk9PiAkaXNfYXJyYXksCiAJCQkna2V5cycJCT0+ICRpbmRleGVzLAogCQkJJ3Bvc3RkYXRhJwk9PiBOVUxMLApAQCAtMjQ4LDkgKzI1NCw5IEBACiAJICogQHBhcmFtCWFycmF5CSRkYXRhCiAJICogQHJldHVybgl2b2lkCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHNldF9kYXRhKCRkYXRhID0gJycpCisJcHVibGljIGZ1bmN0aW9uIHNldF9kYXRhKGFycmF5ICRkYXRhKQogCXsKLQkJaWYgKCAhIGVtcHR5KCRkYXRhKSAmJiBpc19hcnJheSgkZGF0YSkpCisJCWlmICggISBlbXB0eSgkZGF0YSkpCiAJCXsKIAkJCSR0aGlzLT52YWxpZGF0aW9uX2RhdGEgPSAkZGF0YTsKIAkJfQpAQCAtMzA0LDEyICszMTAsMTIgQEAKIAkgKgogCSAqIEdldHMgdGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBmaWVsZAogCSAqCi0JICogQHBhcmFtCXN0cmluZwl0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbQlzdHJpbmcJdGhlIGh0bWwgc3RhcnQgdGFnCi0JICogQHBhcmFtIAlzdHJpZ24JdGhlIGh0bWwgZW5kIHRhZworCSAqIEBwYXJhbQlzdHJpbmcJJGZpZWxkCUZpZWxkIG5hbWUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRwcmVmaXgJSFRNTCBzdGFydCB0YWcKKwkgKiBAcGFyYW0gCXN0cmluZwkkc3VmZml4CUhUTUwgZW5kIHRhZwogCSAqIEByZXR1cm4Jc3RyaW5nCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIGVycm9yKCRmaWVsZCA9ICcnLCAkcHJlZml4ID0gJycsICRzdWZmaXggPSAnJykKKwlwdWJsaWMgZnVuY3Rpb24gZXJyb3IoJGZpZWxkLCAkcHJlZml4ID0gJycsICRzdWZmaXggPSAnJykKIAl7CiAJCWlmIChlbXB0eSgkdGhpcy0+X2ZpZWxkX2RhdGFbJGZpZWxkXVsnZXJyb3InXSkpCiAJCXsKQEAgLTQxNCwxNyArNDIwLDE0IEBACiAJCQkJcmV0dXJuIEZBTFNFOwogCQkJfQogCi0JCQkvLyBJcyB0aGVyZSBhIHZhbGlkYXRpb24gcnVsZSBmb3IgdGhlIHBhcnRpY3VsYXIgVVJJIGJlaW5nIGFjY2Vzc2VkPwotCQkJJHVyaSA9ICgkZ3JvdXAgPT09ICcnKSA/IHRyaW0oJHRoaXMtPkNJLT51cmktPnJ1cmlfc3RyaW5nKCksICcvJykgOiAkZ3JvdXA7CisJCQlpZiAoZW1wdHkoJGdyb3VwKSkKKwkJCXsKKwkJCQkvLyBJcyB0aGVyZSBhIHZhbGlkYXRpb24gcnVsZSBmb3IgdGhlIHBhcnRpY3VsYXIgVVJJIGJlaW5nIGFjY2Vzc2VkPworCQkJCSRncm91cCA9IHRyaW0oJHRoaXMtPkNJLT51cmktPnJ1cmlfc3RyaW5nKCksICcvJyk7CisJCQkJaXNzZXQoJHRoaXMtPl9jb25maWdfcnVsZXNbJGdyb3VwXSkgT1IgJGdyb3VwID0gJHRoaXMtPkNJLT5yb3V0ZXItPmNsYXNzLicvJy4kdGhpcy0+Q0ktPnJvdXRlci0+bWV0aG9kOworCQkJfQogCi0JCQlpZiAoJHVyaSAhPT0gJycgJiYgaXNzZXQoJHRoaXMtPl9jb25maWdfcnVsZXNbJHVyaV0pKQotCQkJewotCQkJCSR0aGlzLT5zZXRfcnVsZXMoJHRoaXMtPl9jb25maWdfcnVsZXNbJHVyaV0pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCSR0aGlzLT5zZXRfcnVsZXMoJHRoaXMtPl9jb25maWdfcnVsZXMpOwotCQkJfQorCQkJJHRoaXMtPnNldF9ydWxlcyhpc3NldCgkdGhpcy0+X2NvbmZpZ19ydWxlc1skZ3JvdXBdKSA/ICR0aGlzLT5fY29uZmlnX3J1bGVzWyRncm91cF0gOiAkdGhpcy0+X2NvbmZpZ19ydWxlcyk7CiAKIAkJCS8vIFdlcmUgd2UgYWJsZSB0byBzZXQgdGhlIHJ1bGVzIGNvcnJlY3RseT8KIAkJCWlmIChjb3VudCgkdGhpcy0+X2ZpZWxkX2RhdGEpID09PSAwKQpAQCAtNTgzLDcgKzU4Niw3IEBACiAKIAkJLy8gSWYgdGhlIGZpZWxkIGlzIGJsYW5rLCBidXQgTk9UIHJlcXVpcmVkLCBubyBmdXJ0aGVyIHRlc3RzIGFyZSBuZWNlc3NhcnkKIAkJJGNhbGxiYWNrID0gRkFMU0U7Ci0JCWlmICggISBpbl9hcnJheSgncmVxdWlyZWQnLCAkcnVsZXMpICYmICRwb3N0ZGF0YSA9PT0gTlVMTCkKKwkJaWYgKCAhIGluX2FycmF5KCdyZXF1aXJlZCcsICRydWxlcykgJiYgKCRwb3N0ZGF0YSA9PT0gTlVMTCBPUiAkcG9zdGRhdGEgPT09ICcnKSkKIAkJewogCQkJLy8gQmVmb3JlIHdlIGJhaWwgb3V0LCBkb2VzIHRoZSBydWxlIGNvbnRhaW4gYSBjYWxsYmFjaz8KIAkJCWlmIChwcmVnX21hdGNoKCcvKGNhbGxiYWNrX1x3KyhcWy4qP1xdKT8pLycsIGltcGxvZGUoJyAnLCAkcnVsZXMpLCAkbWF0Y2gpKQpAQCAtNTk4LDE0ICs2MDEsMTkgQEAKIAkJfQogCiAJCS8vIElzc2V0IFRlc3QuIFR5cGljYWxseSB0aGlzIHJ1bGUgd2lsbCBvbmx5IGFwcGx5IHRvIGNoZWNrYm94ZXMuCi0JCWlmICgkcG9zdGRhdGEgPT09IE5VTEwgJiYgJGNhbGxiYWNrID09PSBGQUxTRSkKKwkJaWYgKCgkcG9zdGRhdGEgPT09IE5VTEwgT1IgJHBvc3RkYXRhID09PSAnJykgJiYgJGNhbGxiYWNrID09PSBGQUxTRSkKIAkJewogCQkJaWYgKGluX2FycmF5KCdpc3NldCcsICRydWxlcywgVFJVRSkgT1IgaW5fYXJyYXkoJ3JlcXVpcmVkJywgJHJ1bGVzKSkKIAkJCXsKIAkJCQkvLyBTZXQgdGhlIG1lc3NhZ2UgdHlwZQogCQkJCSR0eXBlID0gaW5fYXJyYXkoJ3JlcXVpcmVkJywgJHJ1bGVzKSA/ICdyZXF1aXJlZCcgOiAnaXNzZXQnOwogCi0JCQkJaWYgKGlzc2V0KCR0aGlzLT5fZXJyb3JfbWVzc2FnZXNbJHR5cGVdKSkKKwkJCQkvLyBDaGVjayBpZiBhIGN1c3RvbSBtZXNzYWdlIGlzIGRlZmluZWQKKwkJCQlpZiAoaXNzZXQoJHRoaXMtPl9maWVsZF9kYXRhWyRyb3dbJ2ZpZWxkJ11dWydlcnJvcnMnXVskdHlwZV0pKQorCQkJCXsKKwkJCQkJJGxpbmUgPSAkdGhpcy0+X2ZpZWxkX2RhdGFbJHJvd1snZmllbGQnXV1bJ2Vycm9ycyddWyR0eXBlXTsKKwkJCQl9CisJCQkJZWxzZWlmIChpc3NldCgkdGhpcy0+X2Vycm9yX21lc3NhZ2VzWyR0eXBlXSkpCiAJCQkJewogCQkJCQkkbGluZSA9ICR0aGlzLT5fZXJyb3JfbWVzc2FnZXNbJHR5cGVdOwogCQkJCX0KQEAgLTc0OSw3ICs3NTcsMTIgQEAKIAkJCS8vIERpZCB0aGUgcnVsZSB0ZXN0IG5lZ2F0aXZlbHk/IElmIHNvLCBncmFiIHRoZSBlcnJvci4KIAkJCWlmICgkcmVzdWx0ID09PSBGQUxTRSkKIAkJCXsKLQkJCQlpZiAoICEgaXNzZXQoJHRoaXMtPl9lcnJvcl9tZXNzYWdlc1skcnVsZV0pKQorCQkJCS8vIENoZWNrIGlmIGEgY3VzdG9tIG1lc3NhZ2UgaXMgZGVmaW5lZAorCQkJCWlmIChpc3NldCgkdGhpcy0+X2ZpZWxkX2RhdGFbJHJvd1snZmllbGQnXV1bJ2Vycm9ycyddWyRydWxlXSkpCisJCQkJeworCQkJCQkkbGluZSA9ICR0aGlzLT5fZmllbGRfZGF0YVskcm93WydmaWVsZCddXVsnZXJyb3JzJ11bJHJ1bGVdOworCQkJCX0KKwkJCQllbHNlaWYgKCAhIGlzc2V0KCR0aGlzLT5fZXJyb3JfbWVzc2FnZXNbJHJ1bGVdKSkKIAkJCQl7CiAJCQkJCWlmIChGQUxTRSA9PT0gKCRsaW5lID0gJHRoaXMtPkNJLT5sYW5nLT5saW5lKCdmb3JtX3ZhbGlkYXRpb25fJy4kcnVsZSkpCiAJCQkJCQkvLyBERVBSRUNBVEVEIHN1cHBvcnQgZm9yIG5vbi1wcmVmaXhlZCBrZXlzCkBAIC04OTgsMTIgKzkxMSwxOSBAQAogCQl9CiAKIAkJJGZpZWxkID0gJHRoaXMtPl9maWVsZF9kYXRhWyRmaWVsZF1bJ3Bvc3RkYXRhJ107CisJCSR2YWx1ZSA9IChzdHJpbmcpICR2YWx1ZTsKIAkJaWYgKGlzX2FycmF5KCRmaWVsZCkpCiAJCXsKLQkJCWlmICggISBpbl9hcnJheSgkdmFsdWUsICRmaWVsZCkpCisJCQkvLyBOb3RlOiBpbl9hcnJheSgnJywgYXJyYXkoMCkpIHJldHVybnMgVFJVRSwgZG8gbm90IHVzZSBpdAorCQkJZm9yZWFjaCAoJGZpZWxkIGFzICYkdikKIAkJCXsKLQkJCQlyZXR1cm4gJyc7CisJCQkJaWYgKCR2YWx1ZSA9PT0gJHYpCisJCQkJeworCQkJCQlyZXR1cm4gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKKwkJCQl9CiAJCQl9CisKKwkJCXJldHVybiAnJzsKIAkJfQogCQllbHNlaWYgKCgkZmllbGQgPT09ICcnIE9SICR2YWx1ZSA9PT0gJycpIE9SICgkZmllbGQgIT09ICR2YWx1ZSkpCiAJCXsKQEAgLTkzNCwxMiArOTU0LDE5IEBACiAJCX0KIAogCQkkZmllbGQgPSAkdGhpcy0+X2ZpZWxkX2RhdGFbJGZpZWxkXVsncG9zdGRhdGEnXTsKKwkJJHZhbHVlID0gKHN0cmluZykgJHZhbHVlOwogCQlpZiAoaXNfYXJyYXkoJGZpZWxkKSkKIAkJewotCQkJaWYgKCAhIGluX2FycmF5KCR2YWx1ZSwgJGZpZWxkKSkKKwkJCS8vIE5vdGU6IGluX2FycmF5KCcnLCBhcnJheSgwKSkgcmV0dXJucyBUUlVFLCBkbyBub3QgdXNlIGl0CisJCQlmb3JlYWNoICgkZmllbGQgYXMgJiR2KQogCQkJewotCQkJCXJldHVybiAnJzsKKwkJCQlpZiAoJHZhbHVlID09PSAkdikKKwkJCQl7CisJCQkJCXJldHVybiAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsKKwkJCQl9CiAJCQl9CisKKwkJCXJldHVybiAnJzsKIAkJfQogCQllbHNlaWYgKCgkZmllbGQgPT09ICcnIE9SICR2YWx1ZSA9PT0gJycpIE9SICgkZmllbGQgIT09ICR2YWx1ZSkpCiAJCXsKZGlmZiAtLWdpdCBhL3N5c3RlbS9saWJyYXJpZXMvRnRwLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvRnRwLnBocAppbmRleCBkYzZiYmQyLi43M2E2ODQ0IDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL0Z0cC5waHAKKysrIGIvc3lzdGVtL2xpYnJhcmllcy9GdHAucGhwCkBAIC0yMTQsMTIgKzIxNCwxMiBAQAogCSAqIEludGVybmFsbHksIHRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBieSB0aGUgIm1pcnJvciIgZnVuY3Rpb24gYmVsb3cuCiAJICoKIAkgKiBAcGFyYW0Jc3RyaW5nCSRwYXRoCi0JICogQHBhcmFtCWJvb2wJJHN1cHJlc3NfZGVidWcKKwkgKiBAcGFyYW0JYm9vbAkkc3VwcHJlc3NfZGVidWcKIAkgKiBAcmV0dXJuCWJvb2wKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gY2hhbmdlZGlyKCRwYXRoID0gJycsICRzdXByZXNzX2RlYnVnID0gRkFMU0UpCisJcHVibGljIGZ1bmN0aW9uIGNoYW5nZWRpcigkcGF0aCwgJHN1cHByZXNzX2RlYnVnID0gRkFMU0UpCiAJewotCQlpZiAoJHBhdGggPT09ICcnIE9SICEgJHRoaXMtPl9pc19jb25uKCkpCisJCWlmICggISAkdGhpcy0+X2lzX2Nvbm4oKSkKIAkJewogCQkJcmV0dXJuIEZBTFNFOwogCQl9CkBAIC0yMjgsNyArMjI4LDcgQEAKIAogCQlpZiAoJHJlc3VsdCA9PT0gRkFMU0UpCiAJCXsKLQkJCWlmICgkdGhpcy0+ZGVidWcgPT09IFRSVUUgJiYgJHN1cHJlc3NfZGVidWcgPT09IEZBTFNFKQorCQkJaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gVFJVRSAmJiAkc3VwcHJlc3NfZGVidWcgPT09IEZBTFNFKQogCQkJewogCQkJCSR0aGlzLT5fZXJyb3IoJ2Z0cF91bmFibGVfdG9fY2hhbmdlZGlyJyk7CiAJCQl9CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkgKiBAcGFyYW0JaW50CSRwZXJtaXNzaW9ucwogCSAqIEByZXR1cm4JYm9vbAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBta2RpcigkcGF0aCA9ICcnLCAkcGVybWlzc2lvbnMgPSBOVUxMKQorCXB1YmxpYyBmdW5jdGlvbiBta2RpcigkcGF0aCwgJHBlcm1pc3Npb25zID0gTlVMTCkKIAl7CiAJCWlmICgkcGF0aCA9PT0gJycgT1IgISAkdGhpcy0+X2lzX2Nvbm4oKSkKIAkJewpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCXsKIAkJCWlmICgkdGhpcy0+ZGVidWcgPT09IFRSVUUpCiAJCQl7Ci0JCQkJJHRoaXMtPl9lcnJvcignZnRwX3VuYWJsZV90b19tYWtkaXInKTsKKwkJCQkkdGhpcy0+X2Vycm9yKCdmdHBfdW5hYmxlX3RvX21rZGlyJyk7CiAJCQl9CiAJCQlyZXR1cm4gRkFMU0U7CiAJCX0KQEAgLTM5Miw3ICszOTIsNyBAQAogCQl7CiAJCQlpZiAoJHRoaXMtPmRlYnVnID09PSBUUlVFKQogCQkJewotCQkJCSR0aGlzLT5fZXJyb3IoJ2Z0cF91bmFibGVfdG9fJyAuICgkbW92ZSA9PT0gRkFMU0UgPyAncmVuYW1lJyA6ICdtb3ZlJykpOworCQkJCSR0aGlzLT5fZXJyb3IoJ2Z0cF91bmFibGVfdG9fJy4oJG1vdmUgPT09IEZBTFNFID8gJ3JlbmFtZScgOiAnbW92ZScpKTsKIAkJCX0KIAkJCXJldHVybiBGQUxTRTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9KYXZhc2NyaXB0LnBocCBiL3N5c3RlbS9saWJyYXJpZXMvSmF2YXNjcmlwdC5waHAKaW5kZXggMDkwZjRjOS4uMjZhMTY4NSAxMDA2NDQKLS0tIGEvc3lzdGVtL2xpYnJhcmllcy9KYXZhc2NyaXB0LnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL0phdmFzY3JpcHQucGhwCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gZm9jdXMoJGVsZW1lbnQgPSAndGhpcycsICRqcyA9ICcnKQogCXsKLQkJcmV0dXJuICR0aGlzLT5qcy0+X19hZGRfZXZlbnQoJGVsZW1lbnQsICRqcyk7CisJCXJldHVybiAkdGhpcy0+anMtPl9mb2N1cygkZWxlbWVudCwgJGpzKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTg5LDcgKzE4OSw3IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGhvdmVyKCRlbGVtZW50ID0gJ3RoaXMnLCAkb3ZlciA9ICcnLCAkb3V0ID0gJycpCiAJewotCQlyZXR1cm4gJHRoaXMtPmpzLT5fX2hvdmVyKCRlbGVtZW50LCAkb3ZlciwgJG91dCk7CisJCXJldHVybiAkdGhpcy0+anMtPl9ob3ZlcigkZWxlbWVudCwgJG92ZXIsICRvdXQpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL0phdmFzY3JpcHQvSnF1ZXJ5LnBocCBiL3N5c3RlbS9saWJyYXJpZXMvSmF2YXNjcmlwdC9KcXVlcnkucGhwCmluZGV4IGY1ZmE3MmQuLmFiNzhlOGIgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9saWJyYXJpZXMvSmF2YXNjcmlwdC9KcXVlcnkucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvSmF2YXNjcmlwdC9KcXVlcnkucGhwCkBAIC05MjMsNyArOTIzLDYgQEAKIAkJaWYgKGlzX2FycmF5KCRqcykpCiAJCXsKIAkJCSRqcyA9IGltcGxvZGUoIlxuXHRcdCIsICRqcyk7Ci0KIAkJfQogCiAJCSRldmVudCA9ICJcblx0JCgiLiR0aGlzLT5fcHJlcF9lbGVtZW50KCRlbGVtZW50KS4nKS4nLiRldmVudC4iKGZ1bmN0aW9uKCl7XG5cdFx0eyRqc31cblx0fSk7XG4iOwpAQCAtOTM3LDcgKzkzNiw3IEBACiAJICogQ29tcGlsZQogCSAqCiAJICogQXMgZXZlbnRzIGFyZSBzcGVjaWZpZWQsIHRoZXkgYXJlIHN0b3JlZCBpbiBhbiBhcnJheQotCSAqIFRoaXMgZnVuY2l0b24gY29tcGlsZXMgdGhlbSBhbGwgZm9yIG91dHB1dCBvbiBhIHBhZ2UKKwkgKiBUaGlzIGZ1bmN0aW9uIGNvbXBpbGVzIHRoZW0gYWxsIGZvciBvdXRwdXQgb24gYSBwYWdlCiAJICoKIAkgKiBAcGFyYW0Jc3RyaW5nCSR2aWV3X3ZhcgogCSAqIEBwYXJhbQlib29sCSRzY3JpcHRfdGFncwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9QYWdpbmF0aW9uLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvUGFnaW5hdGlvbi5waHAKaW5kZXggMTBmYjI5ZC4uYzZmZmQwMyAxMDA2NDQKLS0tIGEvc3lzdGVtL2xpYnJhcmllcy9QYWdpbmF0aW9uLnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL1BhZ2luYXRpb24ucGhwCkBAIC0zNTQsNyArMzU0LDggQEAKIAlwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX2xpbmtzKCkKIAl7CiAJCS8vIElmIG91ciBpdGVtIGNvdW50IG9yIHBlci1wYWdlIHRvdGFsIGlzIHplcm8gdGhlcmUgaXMgbm8gbmVlZCB0byBjb250aW51ZS4KLQkJaWYgKCR0aGlzLT50b3RhbF9yb3dzID09PSAwIE9SICR0aGlzLT5wZXJfcGFnZSA9PT0gMCkKKwkJLy8gTm90ZTogRE8gTk9UIGNoYW5nZSB0aGUgb3BlcmF0b3IgdG8gPT09IGhlcmUhCisJCWlmICgkdGhpcy0+dG90YWxfcm93cyA9PSAwIE9SICR0aGlzLT5wZXJfcGFnZSA9PSAwKQogCQl7CiAJCQlyZXR1cm4gJyc7CiAJCX0KZGlmZiAtLWdpdCBhL3N5c3RlbS9saWJyYXJpZXMvUGFyc2VyLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvUGFyc2VyLnBocAppbmRleCBjMWYxYWQ3Li4zOTkxMzFjIDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL1BhcnNlci5waHAKKysrIGIvc3lzdGVtL2xpYnJhcmllcy9QYXJzZXIucGhwCkBAIC0xODcsMjYgKzE4NywzNCBAQAogCSAqLwogCXByb3RlY3RlZCBmdW5jdGlvbiBfcGFyc2VfcGFpcigkdmFyaWFibGUsICRkYXRhLCAkc3RyaW5nKQogCXsKLQkJaWYgKEZBTFNFID09PSAoJG1hdGNoID0gJHRoaXMtPl9tYXRjaF9wYWlyKCRzdHJpbmcsICR2YXJpYWJsZSkpKQorCQlpZiAoRkFMU0UgPT09ICgkbWF0Y2hlcyA9ICR0aGlzLT5fbWF0Y2hfcGFpcigkc3RyaW5nLCAkdmFyaWFibGUpKSkKIAkJewogCQkJcmV0dXJuICRzdHJpbmc7CiAJCX0KIAogCQkkc3RyID0gJyc7Ci0JCWZvcmVhY2ggKCRkYXRhIGFzICRyb3cpCisJCSRzZWFyY2ggPSAkcmVwbGFjZSA9IGFycmF5KCk7CisJCWZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaCkKIAkJewotCQkJJHRlbXAgPSAkbWF0Y2hbMV07Ci0JCQlmb3JlYWNoICgkcm93IGFzICRrZXkgPT4gJHZhbCkKKwkJCSRzdHIgPSAnJzsKKwkJCWZvcmVhY2ggKCRkYXRhIGFzICRyb3cpCiAJCQl7Ci0JCQkJJHRlbXAgPSBpc19hcnJheSgkdmFsKQorCQkJCSR0ZW1wID0gJG1hdGNoWzFdOworCQkJCWZvcmVhY2ggKCRyb3cgYXMgJGtleSA9PiAkdmFsKQorCQkJCXsKKwkJCQkJJHRlbXAgPSBpc19hcnJheSgkdmFsKQogCQkJCQkJPyAkdGhpcy0+X3BhcnNlX3BhaXIoJGtleSwgJHZhbCwgJHRlbXApCiAJCQkJCQk6ICR0aGlzLT5fcGFyc2Vfc2luZ2xlKCRrZXksICR2YWwsICR0ZW1wKTsKKwkJCQl9CisKKwkJCQkkc3RyIC49ICR0ZW1wOwogCQkJfQogCi0JCQkkc3RyIC49ICR0ZW1wOworCQkJJHNlYXJjaFtdID0gJG1hdGNoWzBdOworCQkJJHJlcGxhY2VbXSA9ICRzdHI7CiAJCX0KIAotCQlyZXR1cm4gc3RyX3JlcGxhY2UoJG1hdGNoWzBdLCAkc3RyLCAkc3RyaW5nKTsKKwkJcmV0dXJuIHN0cl9yZXBsYWNlKCRzZWFyY2gsICRyZXBsYWNlLCAkc3RyaW5nKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE0LDE0ICsyMjIsMTQgQEAKIAkvKioKIAkgKiBNYXRjaGVzIGEgdmFyaWFibGUgcGFpcgogCSAqCi0JICogQHBhcmFtCXN0cmluZwotCSAqIEBwYXJhbQlzdHJpbmcKKwkgKiBAcGFyYW0Jc3RyaW5nCSRzdHJpbmcKKwkgKiBAcGFyYW0Jc3RyaW5nCSR2YXJpYWJsZQogCSAqIEByZXR1cm4JbWl4ZWQKIAkgKi8KIAlwcm90ZWN0ZWQgZnVuY3Rpb24gX21hdGNoX3BhaXIoJHN0cmluZywgJHZhcmlhYmxlKQogCXsKLQkJcmV0dXJuIHByZWdfbWF0Y2goJ3wnLnByZWdfcXVvdGUoJHRoaXMtPmxfZGVsaW0pLiR2YXJpYWJsZS5wcmVnX3F1b3RlKCR0aGlzLT5yX2RlbGltKS4nKC4rPyknLnByZWdfcXVvdGUoJHRoaXMtPmxfZGVsaW0pLicvJy4kdmFyaWFibGUucHJlZ19xdW90ZSgkdGhpcy0+cl9kZWxpbSkuJ3xzJywKLQkJCQkJJHN0cmluZywgJG1hdGNoKQorCQlyZXR1cm4gcHJlZ19tYXRjaF9hbGwoJ3wnLnByZWdfcXVvdGUoJHRoaXMtPmxfZGVsaW0pLiR2YXJpYWJsZS5wcmVnX3F1b3RlKCR0aGlzLT5yX2RlbGltKS4nKC4rPyknLnByZWdfcXVvdGUoJHRoaXMtPmxfZGVsaW0pLicvJy4kdmFyaWFibGUucHJlZ19xdW90ZSgkdGhpcy0+cl9kZWxpbSkuJ3xzJywKKwkJCQkJJHN0cmluZywgJG1hdGNoLCBQUkVHX1NFVF9PUkRFUikKIAkJCT8gJG1hdGNoIDogRkFMU0U7CiAJfQogCmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL1Byb2ZpbGVyLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvUHJvZmlsZXIucGhwCmluZGV4IDllOWU3ZDAuLjRlNTU2YjIgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9saWJyYXJpZXMvUHJvZmlsZXIucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvUHJvZmlsZXIucGhwCkBAIC0yNzgsNiArMjc4LDcgQEAKIAkJCX0KIAogCQkJJG91dHB1dCAuPSAiPC90YWJsZT5cbjwvZmllbGRzZXQ+IjsKKwkJCSRjb3VudCsrOwogCQl9CiAKIAkJcmV0dXJuICRvdXRwdXQ7CkBAIC0zMDcsMTAgKzMwOCw3IEBACiAKIAkJCWZvcmVhY2ggKCRfR0VUIGFzICRrZXkgPT4gJHZhbCkKIAkJCXsKLQkJCQlpZiAoICEgaXNfbnVtZXJpYygka2V5KSkKLQkJCQl7Ci0JCQkJCSRrZXkgPSAiJyIuJGtleS4iJyI7Ci0JCQkJfQorCQkJCWlzX2ludCgka2V5KSBPUiAka2V5ID0gIiciLiRrZXkuIiciOwogCiAJCQkJJG91dHB1dCAuPSAnPHRyPjx0ZCBzdHlsZT0id2lkdGg6NTAlO2NvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjojZGRkO3BhZGRpbmc6NXB4OyI+JiMzNjtfR0VUWycKIAkJCQkJLiRrZXkuJ10mbmJzcDsmbmJzcDsgPC90ZD48dGQgc3R5bGU9IndpZHRoOjUwJTtwYWRkaW5nOjVweDtjb2xvcjojY2Q2ZTAwO2ZvbnQtd2VpZ2h0Om5vcm1hbDtiYWNrZ3JvdW5kLWNvbG9yOiNkZGQ7Ij4nCkBAIC0zMzgsNyArMzM2LDcgQEAKIAkJCS4iXG4iCiAJCQkuJzxsZWdlbmQgc3R5bGU9ImNvbG9yOiMwMDk5MDA7Ij4mbmJzcDsmbmJzcDsnLiR0aGlzLT5DSS0+bGFuZy0+bGluZSgncHJvZmlsZXJfcG9zdF9kYXRhJykuIiZuYnNwOyZuYnNwOzwvbGVnZW5kPlxuIjsKIAotCQlpZiAoY291bnQoJF9QT1NUKSA9PT0gMCkKKwkJaWYgKGNvdW50KCRfUE9TVCkgPT09IDAgJiYgY291bnQoJF9GSUxFUykgPT09IDApCiAJCXsKIAkJCSRvdXRwdXQgLj0gJzxkaXYgc3R5bGU9ImNvbG9yOiMwMDk5MDA7Zm9udC13ZWlnaHQ6bm9ybWFsO3BhZGRpbmc6NHB4IDAgNHB4IDA7Ij4nLiR0aGlzLT5DSS0+bGFuZy0+bGluZSgncHJvZmlsZXJfbm9fcG9zdCcpLic8L2Rpdj4nOwogCQl9CkBAIC0zNDgsMTAgKzM0Niw3IEBACiAKIAkJCWZvcmVhY2ggKCRfUE9TVCBhcyAka2V5ID0+ICR2YWwpCiAJCQl7Ci0JCQkJaWYgKCAhIGlzX251bWVyaWMoJGtleSkpCi0JCQkJewotCQkJCQkka2V5ID0gIiciLiRrZXkuIiciOwotCQkJCX0KKwkJCQlpc19pbnQoJGtleSkgT1IgJGtleSA9ICInIi4ka2V5LiInIjsKIAogCQkJCSRvdXRwdXQgLj0gJzx0cj48dGQgc3R5bGU9IndpZHRoOjUwJTtwYWRkaW5nOjVweDtjb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6I2RkZDsiPiYjMzY7X1BPU1RbJwogCQkJCQkuJGtleS4nXSZuYnNwOyZuYnNwOyA8L3RkPjx0ZCBzdHlsZT0id2lkdGg6NTAlO3BhZGRpbmc6NXB4O2NvbG9yOiMwMDk5MDA7Zm9udC13ZWlnaHQ6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2RkZDsiPic7CkBAIC0zNjgsNiArMzYzLDIxIEBACiAJCQkJJG91dHB1dCAuPSAiPC90ZD48L3RyPlxuIjsKIAkJCX0KIAorCQkJZm9yZWFjaCAoJF9GSUxFUyBhcyAka2V5ID0+ICR2YWwpCisJCQl7CisJCQkJaXNfaW50KCRrZXkpIE9SICRrZXkgPSAiJyIuJGtleS4iJyI7CisKKwkJCQkkb3V0cHV0IC49ICc8dHI+PHRkIHN0eWxlPSJ3aWR0aDo1MCU7cGFkZGluZzo1cHg7Y29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOiNkZGQ7Ij4mIzM2O19GSUxFU1snCisJCQkJCS4ka2V5LiddJm5ic3A7Jm5ic3A7IDwvdGQ+PHRkIHN0eWxlPSJ3aWR0aDo1MCU7cGFkZGluZzo1cHg7Y29sb3I6IzAwOTkwMDtmb250LXdlaWdodDpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojZGRkOyI+JzsKKworCQkJCWlmIChpc19hcnJheSgkdmFsKSBPUiBpc19vYmplY3QoJHZhbCkpCisJCQkJeworCQkJCQkkb3V0cHV0IC49ICc8cHJlPicuaHRtbHNwZWNpYWxjaGFycyhzdHJpcHNsYXNoZXMocHJpbnRfcigkdmFsLCBUUlVFKSkpLic8L3ByZT4nOworCQkJCX0KKworCQkJCSRvdXRwdXQgLj0gIjwvdGQ+PC90cj5cbiI7CisJCQl9CisKIAkJCSRvdXRwdXQgLj0gIjwvdGFibGU+XG4iOwogCQl9CiAKZGlmZiAtLWdpdCBhL3N5c3RlbS9saWJyYXJpZXMvU2Vzc2lvbi9TZXNzaW9uLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvU2Vzc2lvbi9TZXNzaW9uLnBocAppbmRleCBjN2Y2ZjgyLi5hYzk3Yjk0IDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL1Nlc3Npb24vU2Vzc2lvbi5waHAKKysrIGIvc3lzdGVtL2xpYnJhcmllcy9TZXNzaW9uL1Nlc3Npb24ucGhwCkBAIC02MCwxMSArNjAsMTggQEAKIAlwdWJsaWMgJHBhcmFtcyA9IGFycmF5KCk7CiAKIAkvKioKKwkgKiBWYWxpZCBkcml2ZXJzIGxpc3QKKwkgKgorCSAqIEB2YXIJYXJyYXkKKwkgKi8KKwlwdWJsaWMgJHZhbGlkX2RyaXZlcnMgPSBhcnJheSgnbmF0aXZlJywJJ2Nvb2tpZScpOworCisJLyoqCiAJICogQ3VycmVudCBkcml2ZXIgaW4gdXNlCiAJICoKIAkgKiBAdmFyCXN0cmluZwogCSAqLwotCXByb3RlY3RlZCAkY3VycmVudCA9IE5VTEw7CisJcHVibGljICRjdXJyZW50ID0gTlVMTDsKIAogCS8qKgogCSAqIFVzZXIgZGF0YQpAQCAtOTUsNDYgKzEwMiwzNiBAQAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcGFyYW1zID0gYXJyYXkoKSkKIAl7Ci0JCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKKwkJJF9jb25maWcgPSYgZ2V0X2luc3RhbmNlKCktPmNvbmZpZzsKIAogCQkvLyBObyBzZXNzaW9ucyB1bmRlciBDTEkKLQkJaWYgKCRDSS0+aW5wdXQtPmlzX2NsaV9yZXF1ZXN0KCkpCisJCWlmIChpc19jbGkoKSkKIAkJewogCQkJcmV0dXJuOwogCQl9CiAKIAkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgJ0NJX1Nlc3Npb24gQ2xhc3MgSW5pdGlhbGl6ZWQnKTsKIAotCQkvLyBHZXQgdmFsaWQgZHJpdmVycyBsaXN0Ci0JCSR0aGlzLT52YWxpZF9kcml2ZXJzID0gYXJyYXkoCi0JCQknbmF0aXZlJywKLQkJCSdjb29raWUnCi0JCSk7Ci0JCSRrZXkgPSAnc2Vzc192YWxpZF9kcml2ZXJzJzsKLQkJJGRyaXZlcnMgPSBpc3NldCgkcGFyYW1zWyRrZXldKSA/ICRwYXJhbXNbJGtleV0gOiAkQ0ktPmNvbmZpZy0+aXRlbSgka2V5KTsKLQkJaWYgKCRkcml2ZXJzKQorCQkvLyBBZGQgcG9zc2libGUgZXh0cmEgZW50cmllcyB0byBvdXIgdmFsaWQgZHJpdmVycyBsaXN0CisJCSRkcml2ZXJzID0gaXNzZXQoJHBhcmFtc1snc2Vzc192YWxpZF9kcml2ZXJzJ10pID8gJHBhcmFtc1snc2Vzc192YWxpZF9kcml2ZXJzJ10gOiAkX2NvbmZpZy0+aXRlbSgnc2Vzc192YWxpZF9kcml2ZXJzJyk7CisJCWlmICggISBlbXB0eSgkZHJpdmVycykpCiAJCXsKLQkJCS8vIEFkZCBkcml2ZXIgbmFtZXMgdG8gdmFsaWQgbGlzdAotCQkJZm9yZWFjaCAoKGFycmF5KSAkZHJpdmVycyBhcyAkZHJpdmVyKQotCQkJewotCQkJCWlmICggISBpbl9hcnJheShzdHJ0b2xvd2VyKCRkcml2ZXIpLCBhcnJheV9tYXAoJ3N0cnRvbG93ZXInLCAkdGhpcy0+dmFsaWRfZHJpdmVycykpKQotCQkJCXsKLQkJCQkJJHRoaXMtPnZhbGlkX2RyaXZlcnNbXSA9ICRkcml2ZXI7Ci0JCQkJfQotCQkJfQorCQkJJGRyaXZlcnMgPSBhcnJheV9tYXAoJ3N0cnRvbG93ZXInLCAoYXJyYXkpICRkcml2ZXJzKTsKKwkJCSR0aGlzLT52YWxpZF9kcml2ZXJzID0gYXJyYXlfbWVyZ2UoJHRoaXMtPnZhbGlkX2RyaXZlcnMsIGFycmF5X2RpZmYoJGRyaXZlcnMsICR0aGlzLT52YWxpZF9kcml2ZXJzKSk7CiAJCX0KIAogCQkvLyBHZXQgZHJpdmVyIHRvIGxvYWQKLQkJJGtleSA9ICdzZXNzX2RyaXZlcic7Ci0JCSRkcml2ZXIgPSBpc3NldCgkcGFyYW1zWyRrZXldKSA/ICRwYXJhbXNbJGtleV0gOiAkQ0ktPmNvbmZpZy0+aXRlbSgka2V5KTsKKwkJJGRyaXZlciA9IGlzc2V0KCRwYXJhbXNbJ3Nlc3NfZHJpdmVyJ10pID8gJHBhcmFtc1snc2Vzc19kcml2ZXInXSA6ICRfY29uZmlnLT5pdGVtKCdzZXNzX2RyaXZlcicpOwogCQlpZiAoICEgJGRyaXZlcikKIAkJeworCQkJbG9nX21lc3NhZ2UoJ2RlYnVnJywgIlNlc3Npb246IE5vIGRyaXZlciBuYW1lIGlzIGNvbmZpZ3VyZWQsIGRlZmF1bHRpbmcgdG8gJ2Nvb2tpZScuIik7CiAJCQkkZHJpdmVyID0gJ2Nvb2tpZSc7CiAJCX0KIAotCQlpZiAoICEgaW5fYXJyYXkoc3RydG9sb3dlcigkZHJpdmVyKSwgYXJyYXlfbWFwKCdzdHJ0b2xvd2VyJywgJHRoaXMtPnZhbGlkX2RyaXZlcnMpKSkKKwkJaWYgKCAhIGluX2FycmF5KCRkcml2ZXIsICR0aGlzLT52YWxpZF9kcml2ZXJzKSkKIAkJewotCQkJJHRoaXMtPnZhbGlkX2RyaXZlcnNbXSA9ICRkcml2ZXI7CisJCQlsb2dfbWVzc2FnZSgnZXJyb3InLCAnU2Vzc2lvbjogQ29uZmlndXJlZCBkcml2ZXIgbmFtZSBpcyBub3QgdmFsaWQsIGFib3J0aW5nLicpOworCQkJcmV0dXJuOwogCQl9CiAKIAkJLy8gU2F2ZSBhIGNvcHkgb2YgcGFyYW1ldGVycyBpbiBjYXNlIGRyaXZlcnMgbmVlZCBhY2Nlc3MKQEAgLTI5MSw3ICsyODgsNyBAQAogCSAqIEBwYXJhbQlzdHJpbmcJSXRlbSB2YWx1ZSBvciBlbXB0eSBzdHJpbmcKIAkgKiBAcmV0dXJuCXZvaWQKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gc2V0X3VzZXJkYXRhKCRuZXdkYXRhID0gYXJyYXkoKSwgJG5ld3ZhbCA9ICcnKQorCXB1YmxpYyBmdW5jdGlvbiBzZXRfdXNlcmRhdGEoJG5ld2RhdGEsICRuZXd2YWwgPSAnJykKIAl7CiAJCS8vIFdyYXAgcGFyYW1zIGFzIGFycmF5IGlmIHNpbmd1bGFyCiAJCWlmIChpc19zdHJpbmcoJG5ld2RhdGEpKQpAQCAtMzIwLDcgKzMxNyw3IEBACiAJICogQHBhcmFtCW1peGVkCUl0ZW0gbmFtZSBvciBhcnJheSBvZiBpdGVtIG5hbWVzCiAJICogQHJldHVybgl2b2lkCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHVuc2V0X3VzZXJkYXRhKCRuZXdkYXRhID0gYXJyYXkoKSkKKwlwdWJsaWMgZnVuY3Rpb24gdW5zZXRfdXNlcmRhdGEoJG5ld2RhdGEpCiAJewogCQkvLyBXcmFwIHNpbmdsZSBuYW1lIGFzIGFycmF5CiAJCWlmIChpc19zdHJpbmcoJG5ld2RhdGEpKQpAQCAtMzYzLDcgKzM2MCw3IEBACiAJICogQHBhcmFtCXN0cmluZwlJdGVtIHZhbHVlIG9yIGVtcHR5IHN0cmluZwogCSAqIEByZXR1cm4Jdm9pZAogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBzZXRfZmxhc2hkYXRhKCRuZXdkYXRhID0gYXJyYXkoKSwgJG5ld3ZhbCA9ICcnKQorCXB1YmxpYyBmdW5jdGlvbiBzZXRfZmxhc2hkYXRhKCRuZXdkYXRhLCAkbmV3dmFsID0gJycpCiAJewogCQkvLyBXcmFwIGl0ZW0gYXMgYXJyYXkgaWYgc2luZ3VsYXIKIAkJaWYgKGlzX3N0cmluZygkbmV3ZGF0YSkpCkBAIC00MzcsNyArNDM0LDcgQEAKIAkgKiBAcGFyYW0JaW50CUl0ZW0gbGlmZXRpbWUgaW4gc2Vjb25kcyBvciAwIGZvciBkZWZhdWx0CiAJICogQHJldHVybgl2b2lkCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHNldF90ZW1wZGF0YSgkbmV3ZGF0YSA9IGFycmF5KCksICRuZXd2YWwgPSAnJywgJGV4cGlyZSA9IDApCisJcHVibGljIGZ1bmN0aW9uIHNldF90ZW1wZGF0YSgkbmV3ZGF0YSwgJG5ld3ZhbCA9ICcnLCAkZXhwaXJlID0gMCkKIAl7CiAJCS8vIFNldCBleHBpcmF0aW9uIHRpbWUKIAkJJGV4cGlyZSA9IHRpbWUoKSArICgkZXhwaXJlID8gJGV4cGlyZSA6IHNlbGY6OlRFTVBfRVhQX0RFRik7CkBAIC00NzgsNyArNDc1LDcgQEAKIAkgKiBAcGFyYW0JbWl4ZWQJSXRlbSBuYW1lIG9yIGFycmF5IG9mIGl0ZW0gbmFtZXMKIAkgKiBAcmV0dXJuCXZvaWQKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gdW5zZXRfdGVtcGRhdGEoJG5ld2RhdGEgPSBhcnJheSgpKQorCXB1YmxpYyBmdW5jdGlvbiB1bnNldF90ZW1wZGF0YSgkbmV3ZGF0YSkKIAl7CiAJCS8vIEdldCBleHBpcmF0aW9ucyBsaXN0CiAJCSRleHBpcmF0aW9ucyA9ICR0aGlzLT51c2VyZGF0YShzZWxmOjpFWFBJUkFUSU9OX0tFWSk7CmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL1Nlc3Npb24vZHJpdmVycy9TZXNzaW9uX2Nvb2tpZS5waHAgYi9zeXN0ZW0vbGlicmFyaWVzL1Nlc3Npb24vZHJpdmVycy9TZXNzaW9uX2Nvb2tpZS5waHAKaW5kZXggZDNkMjJkMC4uOTcxZGZlYSAxMDA2NDQKLS0tIGEvc3lzdGVtL2xpYnJhcmllcy9TZXNzaW9uL2RyaXZlcnMvU2Vzc2lvbl9jb29raWUucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvU2Vzc2lvbi9kcml2ZXJzL1Nlc3Npb25fY29va2llLnBocApAQCAtMTY1LDYgKzE2NSw4IEBACiAJICovCiAJcHVibGljICRub3c7CiAKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogCS8qKgogCSAqIERlZmF1bHQgdXNlcmRhdGEga2V5cwogCSAqCkBAIC0xODUsNiArMTg3LDE1IEBACiAJcHJvdGVjdGVkICRkYXRhX2RpcnR5ID0gRkFMU0U7CiAKIAkvKioKKwkgKiBTdGFuZGFyZGl6ZSBuZXdsaW5lcyBmbGFnCisJICoKKwkgKiBAdmFyCWJvb2wKKwkgKi8KKwlwcm90ZWN0ZWQgJF9zdGFuZGFyZGl6ZV9uZXdsaW5lczsKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJLyoqCiAJICogSW5pdGlhbGl6ZSBzZXNzaW9uIGRyaXZlciBvYmplY3QKIAkgKgogCSAqIEByZXR1cm4Jdm9pZApAQCAtMjA5LDkgKzIyMCwxMSBAQAogCQkJJ3Nlc3NfdGltZV90b191cGRhdGUnLAogCQkJJ3RpbWVfcmVmZXJlbmNlJywKIAkJCSdjb29raWVfcHJlZml4JywKLQkJCSdlbmNyeXB0aW9uX2tleScKKwkJCSdlbmNyeXB0aW9uX2tleScsCiAJCSk7CiAKKwkJJHRoaXMtPl9zdGFuZGFyZGl6ZV9uZXdsaW5lcyA9IChib29sKSBjb25maWdfaXRlbSgnc3RhbmRhcmRpemVfbmV3bGluZXMnKTsKKwogCQlmb3JlYWNoICgkcHJlZnMgYXMgJGtleSkKIAkJewogCQkJJHRoaXMtPiRrZXkgPSBpc3NldCgkdGhpcy0+X3BhcmVudC0+cGFyYW1zWyRrZXldKQpAQCAtMzk3LDcgKzQxMCw3IEBACiAJCX0KIAogCQkvLyBVbnNlcmlhbGl6ZSB0aGUgc2Vzc2lvbiBhcnJheQotCQkkc2Vzc2lvbiA9ICR0aGlzLT5fdW5zZXJpYWxpemUoJHNlc3Npb24pOworCQkkc2Vzc2lvbiA9IEB1bnNlcmlhbGl6ZSgkc2Vzc2lvbik7CiAKIAkJLy8gSXMgdGhlIHNlc3Npb24gZGF0YSB3ZSB1bnNlcmlhbGl6ZWQgYW4gYXJyYXkgd2l0aCB0aGUgY29ycmVjdCBmb3JtYXQ/CiAJCWlmICggISBpc19hcnJheSgkc2Vzc2lvbikgT1IgISBpc3NldCgkc2Vzc2lvblsnc2Vzc2lvbl9pZCddLCAkc2Vzc2lvblsnaXBfYWRkcmVzcyddLCAkc2Vzc2lvblsndXNlcl9hZ2VudCddLCAkc2Vzc2lvblsnbGFzdF9hY3Rpdml0eSddKSkKQEAgLTQ3Miw3ICs0ODUsNyBAQAogCQkJJHJvdyA9ICRxdWVyeS0+cm93KCk7CiAJCQlpZiAoICEgZW1wdHkoJHJvdy0+dXNlcl9kYXRhKSkKIAkJCXsKLQkJCQkkY3VzdG9tX2RhdGEgPSAkdGhpcy0+X3Vuc2VyaWFsaXplKCRyb3ctPnVzZXJfZGF0YSk7CisJCQkJJGN1c3RvbV9kYXRhID0gdW5zZXJpYWxpemUodHJpbSgkcm93LT51c2VyX2RhdGEpKTsKIAogCQkJCWlmIChpc19hcnJheSgkY3VzdG9tX2RhdGEpKQogCQkJCXsKQEAgLTYwOCw3ICs2MjEsNyBAQAogCQkJaWYgKCAhIGVtcHR5KCR1c2VyZGF0YSkpCiAJCQl7CiAJCQkJLy8gU2VyaWFsaXplIHRoZSBjdXN0b20gZGF0YSBhcnJheSBzbyB3ZSBjYW4gc3RvcmUgaXQKLQkJCQkkc2V0Wyd1c2VyX2RhdGEnXSA9ICR0aGlzLT5fc2VyaWFsaXplKCR1c2VyZGF0YSk7CisJCQkJJHNldFsndXNlcl9kYXRhJ10gPSBzZXJpYWxpemUoJHVzZXJkYXRhKTsKIAkJCX0KIAogCQkJLy8gUmVzZXQgcXVlcnkgYnVpbGRlciB2YWx1ZXMuCkBAIC02OTUsOCArNzA4LDE4IEBACiAJCQkJPyBhcnJheV9pbnRlcnNlY3Rfa2V5KCR0aGlzLT51c2VyZGF0YSwgJHRoaXMtPmRlZmF1bHRzKQogCQkJCTogJHRoaXMtPnVzZXJkYXRhOwogCisJCS8vIFRoZSBJbnB1dCBjbGFzcyB3aWxsIGRvIHRoaXMgYW5kIHNpbmNlIHdlIHVzZSBITUFDIHZlcmlmaWNhdGlvbiwKKwkJLy8gdW5sZXNzIHdlIHN0YW5kYXJkaXplIGhlcmUgYXMgd2VsbCwgdGhlIGhhc2ggd29uJ3QgbWF0Y2guCisJCWlmICgkdGhpcy0+X3N0YW5kYXJkaXplX25ld2xpbmVzKQorCQl7CisJCQlmb3JlYWNoIChhcnJheV9rZXlzKCR0aGlzLT51c2VyZGF0YSkgYXMgJGtleSkKKwkJCXsKKwkJCQkkdGhpcy0+dXNlcmRhdGFbJGtleV0gPSBwcmVnX3JlcGxhY2UoJy8oPzpcclxufFtcclxuXSkvJywgUEhQX0VPTCwgJHRoaXMtPnVzZXJkYXRhWyRrZXldKTsKKwkJCX0KKwkJfQorCiAJCS8vIFNlcmlhbGl6ZSB0aGUgdXNlcmRhdGEgZm9yIHRoZSBjb29raWUKLQkJJGNvb2tpZV9kYXRhID0gJHRoaXMtPl9zZXJpYWxpemUoJGNvb2tpZV9kYXRhKTsKKwkJJGNvb2tpZV9kYXRhID0gc2VyaWFsaXplKCRjb29raWVfZGF0YSk7CiAKIAkJaWYgKCR0aGlzLT5zZXNzX2VuY3J5cHRfY29va2llID09PSBUUlVFKQogCQl7CkBAIC03MzcsOTMgKzc2MCw2IEBACiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkvKioKLQkgKiBTZXJpYWxpemUgYW4gYXJyYXkKLQkgKgotCSAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgY29udmVydHMgYW55IHNsYXNoZXMgZm91bmQgaW4gdGhlIGFycmF5IHRvIGEgdGVtcG9yYXJ5Ci0JICogbWFya2VyLCBzbyB3aGVuIGl0IGdldHMgdW5zZXJpYWxpemVkIHRoZSBzbGFzaGVzIHdpbGwgYmUgcHJlc2VydmVkCi0JICoKLQkgKiBAcGFyYW0JbWl4ZWQJRGF0YSB0byBzZXJpYWxpemUKLQkgKiBAcmV0dXJuCXN0cmluZwlTZXJpYWxpemVkIGRhdGEKLQkgKi8KLQlwcm90ZWN0ZWQgZnVuY3Rpb24gX3NlcmlhbGl6ZSgkZGF0YSkKLQl7Ci0JCWlmIChpc19hcnJheSgkZGF0YSkpCi0JCXsKLQkJCWFycmF5X3dhbGtfcmVjdXJzaXZlKCRkYXRhLCBhcnJheSgmJHRoaXMsICdfZXNjYXBlX3NsYXNoZXMnKSk7Ci0JCX0KLQkJZWxzZWlmIChpc19zdHJpbmcoJGRhdGEpKQotCQl7Ci0JCQkkZGF0YSA9IHN0cl9yZXBsYWNlKCdcXCcsICd7e3NsYXNofX0nLCAkZGF0YSk7Ci0JCX0KLQotCQlyZXR1cm4gc2VyaWFsaXplKCRkYXRhKTsKLQl9Ci0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCS8qKgotCSAqIEVzY2FwZSBzbGFzaGVzCi0JICoKLQkgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGFueSBzbGFzaGVzIGZvdW5kIGludG8gYSB0ZW1wb3JhcnkgbWFya2VyCi0JICoKLQkgKiBAcGFyYW0Jc3RyaW5nCVZhbHVlCi0JICogQHBhcmFtCXN0cmluZwlLZXkKLQkgKiBAcmV0dXJuCXZvaWQKLQkgKi8KLQlwcm90ZWN0ZWQgZnVuY3Rpb24gX2VzY2FwZV9zbGFzaGVzKCYkdmFsLCAka2V5KQotCXsKLQkJaWYgKGlzX3N0cmluZygkdmFsKSkKLQkJewotCQkJJHZhbCA9IHN0cl9yZXBsYWNlKCdcXCcsICd7e3NsYXNofX0nLCAkdmFsKTsKLQkJfQotCX0KLQotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JLyoqCi0JICogVW5zZXJpYWxpemUKLQkgKgotCSAqIFRoaXMgZnVuY3Rpb24gdW5zZXJpYWxpemVzIGEgZGF0YSBzdHJpbmcsIHRoZW4gY29udmVydHMgYW55Ci0JICogdGVtcG9yYXJ5IHNsYXNoIG1hcmtlcnMgYmFjayB0byBhY3R1YWwgc2xhc2hlcwotCSAqCi0JICogQHBhcmFtCW1peGVkCURhdGEgdG8gdW5zZXJpYWxpemUKLQkgKiBAcmV0dXJuCW1peGVkCVVuc2VyaWFsaXplZCBkYXRhCi0JICovCi0JcHJvdGVjdGVkIGZ1bmN0aW9uIF91bnNlcmlhbGl6ZSgkZGF0YSkKLQl7Ci0JCSRkYXRhID0gQHVuc2VyaWFsaXplKHRyaW0oJGRhdGEpKTsKLQotCQlpZiAoaXNfYXJyYXkoJGRhdGEpKQotCQl7Ci0JCQlhcnJheV93YWxrX3JlY3Vyc2l2ZSgkZGF0YSwgYXJyYXkoJiR0aGlzLCAnX3VuZXNjYXBlX3NsYXNoZXMnKSk7Ci0JCQlyZXR1cm4gJGRhdGE7Ci0JCX0KLQotCQlyZXR1cm4gaXNfc3RyaW5nKCRkYXRhKSA/IHN0cl9yZXBsYWNlKCd7e3NsYXNofX0nLCAnXFwnLCAkZGF0YSkgOiAkZGF0YTsKLQl9Ci0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCS8qKgotCSAqIFVuZXNjYXBlIHNsYXNoZXMKLQkgKgotCSAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYW55IHNsYXNoIG1hcmtlcnMgYmFjayBpbnRvIGFjdHVhbCBzbGFzaGVzCi0JICoKLQkgKiBAcGFyYW0Jc3RyaW5nCVZhbHVlCi0JICogQHBhcmFtCXN0cmluZwlLZXkKLQkgKiBAcmV0dXJuCXZvaWQKLQkgKi8KLQlwcm90ZWN0ZWQgZnVuY3Rpb24gX3VuZXNjYXBlX3NsYXNoZXMoJiR2YWwsICRrZXkpCi0JewotCQlpZiAoaXNfc3RyaW5nKCR2YWwpKQotCQl7Ci0JIAkJJHZhbCA9IHN0cl9yZXBsYWNlKCd7e3NsYXNofX0nLCAnXFwnLCAkdmFsKTsKLQkJfQotCX0KLQotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JLyoqCiAJICogR2FyYmFnZSBjb2xsZWN0aW9uCiAJICoKIAkgKiBUaGlzIGRlbGV0ZXMgZXhwaXJlZCBzZXNzaW9uIHJvd3MgZnJvbSBkYXRhYmFzZQpAQCAtODQxLDcgKzc3Nyw3IEBACiAJCSRwcm9iYWJpbGl0eSA9IGluaV9nZXQoJ3Nlc3Npb24uZ2NfcHJvYmFiaWxpdHknKTsKIAkJJGRpdmlzb3IgPSBpbmlfZ2V0KCdzZXNzaW9uLmdjX2Rpdmlzb3InKTsKIAotCQlpZiAoKG10X3JhbmQoMCwgJGRpdmlzb3IpIC8gJGRpdmlzb3IpIDwgJHByb2JhYmlsaXR5KQorCQlpZiAobXRfcmFuZCgxLCAkZGl2aXNvcikgPD0gJHByb2JhYmlsaXR5KQogCQl7CiAJCQkkZXhwaXJlID0gJHRoaXMtPm5vdyAtICR0aGlzLT5zZXNzX2V4cGlyYXRpb247CiAJCQkkdGhpcy0+Q0ktPmRiLT5kZWxldGUoJHRoaXMtPnNlc3NfdGFibGVfbmFtZSwgJ2xhc3RfYWN0aXZpdHkgPCAnLiRleHBpcmUpOwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9Vbml0X3Rlc3QucGhwIGIvc3lzdGVtL2xpYnJhcmllcy9Vbml0X3Rlc3QucGhwCmluZGV4IDdhNjdjNzIuLmU0MTJiOTggMTAwNjQ0Ci0tLSBhL3N5c3RlbS9saWJyYXJpZXMvVW5pdF90ZXN0LnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL1VuaXRfdGVzdC5waHAKQEAgLTgxLDcgKzgxLDE1IEBACiAJICoKIAkgKiBAdmFyCWFycmF5CiAJICovCi0JcHJvdGVjdGVkICRfdGVzdF9pdGVtc192aXNpYmxlCT0gYXJyYXkoKTsKKwlwcm90ZWN0ZWQgJF90ZXN0X2l0ZW1zX3Zpc2libGUJPSBhcnJheSgKKwkJCSd0ZXN0X25hbWUnLAorCQkJJ3Rlc3RfZGF0YXR5cGUnLAorCQkJJ3Jlc19kYXRhdHlwZScsCisJCQkncmVzdWx0JywKKwkJCSdmaWxlJywKKwkJCSdsaW5lJywKKwkJCSdub3RlcycKKwkpOwogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtOTIsMTcgKzEwMCw2IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKIAl7Ci0JCS8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBpdGVtcyB2aXNpYmxlIHdoZW4gYSB0ZXN0IGlzIHJ1bi4KLQkJJHRoaXMtPl90ZXN0X2l0ZW1zX3Zpc2libGUgPSBhcnJheSAoCi0JCQkJCQkJJ3Rlc3RfbmFtZScsCi0JCQkJCQkJJ3Rlc3RfZGF0YXR5cGUnLAotCQkJCQkJCSdyZXNfZGF0YXR5cGUnLAotCQkJCQkJCSdyZXN1bHQnLAotCQkJCQkJCSdmaWxlJywKLQkJCQkJCQknbGluZScsCi0JCQkJCQkJJ25vdGVzJwotCQkJCQkJKTsKLQogCQlsb2dfbWVzc2FnZSgnZGVidWcnLCAnVW5pdCBUZXN0aW5nIENsYXNzIEluaXRpYWxpemVkJyk7CiAJfQogCkBAIC0xMTMsMTAgKzExMCwxMCBAQAogCSAqCiAJICogUnVucyB0aGUgc3VwcGxpZWQgdGVzdHMKIAkgKgotCSAqIEBwYXJhbQlhcnJheQorCSAqIEBwYXJhbQlhcnJheQkkaXRlbXMKIAkgKiBAcmV0dXJuCXZvaWQKIAkgKi8KLQlwdWJsaWMgZnVuY3Rpb24gc2V0X3Rlc3RfaXRlbXMoJGl0ZW1zID0gYXJyYXkoKSkKKwlwdWJsaWMgZnVuY3Rpb24gc2V0X3Rlc3RfaXRlbXMoJGl0ZW1zKQogCXsKIAkJaWYgKCAhIGVtcHR5KCRpdGVtcykgJiYgaXNfYXJyYXkoJGl0ZW1zKSkKIAkJewpAQCAtMjMwLDcgKzIyNyw3IEBACiAJICoKIAkgKiBDYXVzZXMgdGhlIGV2YWx1YXRpb24gdG8gdXNlID09PSByYXRoZXIgdGhhbiA9PQogCSAqCi0JICogQHBhcmFtCWJvb2wKKwkgKiBAcGFyYW0JYm9vbAkkc3RhdGUKIAkgKiBAcmV0dXJuCXZvaWQKIAkgKi8KIAlwdWJsaWMgZnVuY3Rpb24gdXNlX3N0cmljdCgkc3RhdGUgPSBUUlVFKQpAQCAtMjg4LDYgKzI4NSw3IEBACiAJCQkJewogCQkJCQkkdmFsID0gJGxpbmU7CiAJCQkJfQorCiAJCQkJJHRlbXBbJENJLT5sYW5nLT5saW5lKCd1dF8nLiRrZXksIEZBTFNFKV0gPSAkdmFsOwogCQkJfQogCkBAIC0zOTYsNCArMzk0LDQgQEAKIH0KIAogLyogRW5kIG9mIGZpbGUgVW5pdF90ZXN0LnBocCAqLwotLyogTG9jYXRpb246IC4vc3lzdGVtL2xpYnJhcmllcy9Vbml0X3Rlc3QucGhwICovCisvKiBMb2NhdGlvbjogLi9zeXN0ZW0vbGlicmFyaWVzL1VuaXRfdGVzdC5waHAgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL1VwbG9hZC5waHAgYi9zeXN0ZW0vbGlicmFyaWVzL1VwbG9hZC5waHAKaW5kZXggODU0MjgwNC4uNTI1ODgwZiAxMDA2NDQKLS0tIGEvc3lzdGVtL2xpYnJhcmllcy9VcGxvYWQucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvVXBsb2FkLnBocApAQCAtMjM0LDYgKzIzNCwxMyBAQAogCXB1YmxpYyAkeHNzX2NsZWFuCQk9IEZBTFNFOwogCiAJLyoqCisJICogQXBhY2hlIG1vZF9taW1lIGZpeCBmbGFnCisJICoKKwkgKiBAdmFyCWJvb2wKKwkgKi8KKwlwdWJsaWMgJG1vZF9taW1lX2ZpeAkJPSBUUlVFOworCisJLyoqCiAJICogVGVtcG9yYXJ5IGZpbGVuYW1lIHByZWZpeAogCSAqCiAJICogQHZhcglzdHJpbmcKQEAgLTI1Niw2ICsyNjMsMTMgQEAKIAkgKi8KIAlwcm90ZWN0ZWQgJF9maWxlX25hbWVfb3ZlcnJpZGUJPSAnJzsKIAorCS8qKgorCSAqIENJIFNpbmdsZXRvbgorCSAqCisJICogQHZhcglvYmplY3QKKwkgKi8KKwlwcm90ZWN0ZWQgJENJOworCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCS8qKgpAQCAtMjcyLDYgKzI4Niw3IEBACiAJCX0KIAogCQkkdGhpcy0+bWltZXMgPSYgZ2V0X21pbWVzKCk7CisJCSR0aGlzLT5DSSA9JiBnZXRfaW5zdGFuY2UoKTsKIAogCQlsb2dfbWVzc2FnZSgnZGVidWcnLCAnVXBsb2FkIENsYXNzIEluaXRpYWxpemVkJyk7CiAJfQpAQCAtMzE0LDYgKzMyOSw3IEBACiAJCQkJCSdyZW1vdmVfc3BhY2VzJwkJCT0+IFRSVUUsCiAJCQkJCSdkZXRlY3RfbWltZScJCQk9PiBUUlVFLAogCQkJCQkneHNzX2NsZWFuJwkJCT0+IEZBTFNFLAorCQkJCQknbW9kX21pbWVfZml4JwkJCT0+IFRSVUUsCiAJCQkJCSd0ZW1wX3ByZWZpeCcJCQk9PiAndGVtcF9maWxlXycsCiAJCQkJCSdjbGllbnRfbmFtZScJCQk9PiAnJwogCQkJCSk7CkBAIC00NjMsNyArNDc5LDcgQEAKIAkJfQogCiAJCS8vIEFyZSB0aGUgaW1hZ2UgZGltZW5zaW9ucyB3aXRoaW4gdGhlIGFsbG93ZWQgc2l6ZT8KLQkJLy8gTm90ZTogVGhpcyBjYW4gZmFpbCBpZiB0aGUgc2VydmVyIGhhcyBhbiBvcGVuX2Jhc2RpciByZXN0cmljdGlvbi4KKwkJLy8gTm90ZTogVGhpcyBjYW4gZmFpbCBpZiB0aGUgc2VydmVyIGhhcyBhbiBvcGVuX2Jhc2VkaXIgcmVzdHJpY3Rpb24uCiAJCWlmICggISAkdGhpcy0+aXNfYWxsb3dlZF9kaW1lbnNpb25zKCkpCiAJCXsKIAkJCSR0aGlzLT5zZXRfZXJyb3IoJ3VwbG9hZF9pbnZhbGlkX2RpbWVuc2lvbnMnKTsKQEAgLTQ3MSw4ICs0ODcsNyBAQAogCQl9CiAKIAkJLy8gU2FuaXRpemUgdGhlIGZpbGUgbmFtZSBmb3Igc2VjdXJpdHkKLQkJJENJID0mIGdldF9pbnN0YW5jZSgpOwotCQkkdGhpcy0+ZmlsZV9uYW1lID0gJENJLT5zZWN1cml0eS0+c2FuaXRpemVfZmlsZW5hbWUoJHRoaXMtPmZpbGVfbmFtZSk7CisJCSR0aGlzLT5maWxlX25hbWUgPSAkdGhpcy0+Q0ktPnNlY3VyaXR5LT5zYW5pdGl6ZV9maWxlbmFtZSgkdGhpcy0+ZmlsZV9uYW1lKTsKIAogCQkvLyBUcnVuY2F0ZSB0aGUgZmlsZSBuYW1lIGlmIGl0J3MgdG9vIGxvbmcKIAkJaWYgKCR0aGlzLT5tYXhfZmlsZW5hbWUgPiAwKQpAQCAtMTA3Myw4ICsxMDg4LDcgQEAKIAkJCXJldHVybiBGQUxTRTsKIAkJfQogCi0JCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKLQkJcmV0dXJuICRDSS0+c2VjdXJpdHktPnhzc19jbGVhbigkZGF0YSwgVFJVRSk7CisJCXJldHVybiAkdGhpcy0+Q0ktPnNlY3VyaXR5LT54c3NfY2xlYW4oJGRhdGEsIFRSVUUpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDg3LDE3ICsxMTAxLDEzIEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIHNldF9lcnJvcigkbXNnKQogCXsKLQkJJENJID0mIGdldF9pbnN0YW5jZSgpOwotCQkkQ0ktPmxhbmctPmxvYWQoJ3VwbG9hZCcpOworCQkkdGhpcy0+Q0ktPmxhbmctPmxvYWQoJ3VwbG9hZCcpOwogCi0JCWlmICggISBpc19hcnJheSgkbXNnKSkKLQkJewotCQkJJG1zZyA9IGFycmF5KCRtc2cpOwotCQl9CisJCWlzX2FycmF5KCRtc2cpIE9SICRtc2cgPSBhcnJheSgkbXNnKTsKIAogCQlmb3JlYWNoICgkbXNnIGFzICR2YWwpCiAJCXsKLQkJCSRtc2cgPSAoJENJLT5sYW5nLT5saW5lKCR2YWwpID09PSBGQUxTRSkgPyAkdmFsIDogJENJLT5sYW5nLT5saW5lKCR2YWwpOworCQkJJG1zZyA9ICgkdGhpcy0+Q0ktPmxhbmctPmxpbmUoJHZhbCkgPT09IEZBTFNFKSA/ICR2YWwgOiAkdGhpcy0+Q0ktPmxhbmctPmxpbmUoJHZhbCk7CiAJCQkkdGhpcy0+ZXJyb3JfbXNnW10gPSAkbXNnOwogCQkJbG9nX21lc3NhZ2UoJ2Vycm9yJywgJG1zZyk7CiAJCX0KQEAgLTExNDgsNyArMTE1OCw3IEBACiAJICovCiAJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wcmVwX2ZpbGVuYW1lKCRmaWxlbmFtZSkKIAl7Ci0JCWlmIChzdHJwb3MoJGZpbGVuYW1lLCAnLicpID09PSBGQUxTRSBPUiAkdGhpcy0+YWxsb3dlZF90eXBlcyA9PT0gJyonKQorCQlpZiAoJHRoaXMtPm1vZF9taW1lX2ZpeCA9PT0gRkFMU0UgT1IgJHRoaXMtPmFsbG93ZWRfdHlwZXMgPT09ICcqJyBPUiBzdHJwb3MoJGZpbGVuYW1lLCAnLicpID09PSBGQUxTRSkKIAkJewogCQkJcmV0dXJuICRmaWxlbmFtZTsKIAkJfQpAQCAtMTI0NSw3ICsxMjU1LDcgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCWlmICggKGJvb2wpIEBpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PT0gRkFMU0UgJiYgZnVuY3Rpb25fdXNhYmxlKCdzaGVsbF9leGVjJykpCisJCQlpZiAoKGJvb2wpIEBpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PT0gRkFMU0UgJiYgZnVuY3Rpb25fdXNhYmxlKCdzaGVsbF9leGVjJykpCiAJCQl7CiAJCQkJJG1pbWUgPSBAc2hlbGxfZXhlYygkY21kKTsKIAkJCQlpZiAoc3RybGVuKCRtaW1lKSA+IDApCmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL1VzZXJfYWdlbnQucGhwIGIvc3lzdGVtL2xpYnJhcmllcy9Vc2VyX2FnZW50LnBocAppbmRleCAyZjZmODE5Li4xZGZhM2U3IDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL1VzZXJfYWdlbnQucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvVXNlcl9hZ2VudC5waHAKQEAgLTE0NSw2ICsxNDUsMTUgQEAKIAlwdWJsaWMgJHJvYm90ID0gJyc7CiAKIAkvKioKKwkgKiBIVFRQIFJlZmVyZXIKKwkgKgorCSAqIEB2YXIJbWl4ZWQKKwkgKi8KKwlwdWJsaWMgJHJlZmVyZXI7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJLyoqCiAJICogQ29uc3RydWN0b3IKIAkgKgogCSAqIFNldHMgdGhlIFVzZXIgQWdlbnQgYW5kIHJ1bnMgdGhlIGNvbXBpbGF0aW9uIHJvdXRpbmUKQEAgLTI4Miw3ICsyOTEsNyBAQAogCQl7CiAJCQlmb3JlYWNoICgkdGhpcy0+YnJvd3NlcnMgYXMgJGtleSA9PiAkdmFsKQogCQkJewotCQkJCWlmIChwcmVnX21hdGNoKCd8Jy5wcmVnX3F1b3RlKCRrZXkpLicuKj8oWzAtOVwuXSspfGknLCAkdGhpcy0+YWdlbnQsICRtYXRjaCkpCisJCQkJaWYgKHByZWdfbWF0Y2goJ3wnLiRrZXkuJy4qPyhbMC05XC5dKyl8aScsICR0aGlzLT5hZ2VudCwgJG1hdGNoKSkKIAkJCQl7CiAJCQkJCSR0aGlzLT5pc19icm93c2VyID0gVFJVRTsKIAkJCQkJJHRoaXMtPnZlcnNpb24gPSAkbWF0Y2hbMV07CkBAIC0zNTgsNyArMzY3LDcgQEAKIAl7CiAJCWlmICgoY291bnQoJHRoaXMtPmxhbmd1YWdlcykgPT09IDApICYmICEgZW1wdHkoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10pKQogCQl7Ci0JCQkkdGhpcy0+bGFuZ3VhZ2VzID0gZXhwbG9kZSgnLCcsIHByZWdfcmVwbGFjZSgnLyg7cT1bMC05XC5dKykvaScsICcnLCBzdHJ0b2xvd2VyKHRyaW0oJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10pKSkpOworCQkJJHRoaXMtPmxhbmd1YWdlcyA9IGV4cGxvZGUoJywnLCBwcmVnX3JlcGxhY2UoJy8oO1xzP3E9WzAtOVwuXSspfFxzL2knLCAnJywgc3RydG9sb3dlcih0cmltKCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddKSkpKTsKIAkJfQogCiAJCWlmIChjb3VudCgkdGhpcy0+bGFuZ3VhZ2VzKSA9PT0gMCkKQEAgLTM3OCw3ICszODcsNyBAQAogCXsKIAkJaWYgKChjb3VudCgkdGhpcy0+Y2hhcnNldHMpID09PSAwKSAmJiAhIGVtcHR5KCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9DSEFSU0VUJ10pKQogCQl7Ci0JCQkkdGhpcy0+Y2hhcnNldHMgPSBleHBsb2RlKCcsJywgcHJlZ19yZXBsYWNlKCcvKDtxPS4rKS9pJywgJycsIHN0cnRvbG93ZXIodHJpbSgkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfQ0hBUlNFVCddKSkpKTsKKwkJCSR0aGlzLT5jaGFyc2V0cyA9IGV4cGxvZGUoJywnLCBwcmVnX3JlcGxhY2UoJy8oO1xzP3E9LispfFxzL2knLCAnJywgc3RydG9sb3dlcih0cmltKCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9DSEFSU0VUJ10pKSkpOwogCQl9CiAKIAkJaWYgKGNvdW50KCR0aGlzLT5jaGFyc2V0cykgPT09IDApCkBAIC00NzEsMTMgKzQ4MCwyMiBAQAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBpc19yZWZlcnJhbCgpCiAJewotCQlpZiAoZW1wdHkoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSkKKwkJaWYgKCAhIGlzc2V0KCR0aGlzLT5yZWZlcmVyKSkKIAkJewotCQkJcmV0dXJuIEZBTFNFOworCQkJaWYgKGVtcHR5KCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSkpCisJCQl7CisJCQkJJHRoaXMtPnJlZmVyZXIgPSBGQUxTRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkcmVmZXJlcl9ob3N0ID0gQHBhcnNlX3VybCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10sIFBIUF9VUkxfSE9TVCk7CisJCQkJJG93bl9ob3N0ID0gcGFyc2VfdXJsKGNvbmZpZ19pdGVtKCdiYXNlX3VybCcpLCBQSFBfVVJMX0hPU1QpOworCisJCQkJJHRoaXMtPnJlZmVyZXIgPSAoJHJlZmVyZXJfaG9zdCAmJiAkcmVmZXJlcl9ob3N0ICE9PSAkb3duX2hvc3QpOworCQkJfQogCQl9CiAKLQkJJHJlZmVyZXIgPSBwYXJzZV91cmwoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKTsKLQkJcmV0dXJuICEgKGVtcHR5KCRyZWZlcmVyWydob3N0J10pICYmIHN0cnBvcyhjb25maWdfaXRlbSgnYmFzZV91cmwnKSwgJHJlZmVyZXJbJ2hvc3QnXSkgIT09IEZBTFNFKTsKKwkJcmV0dXJuICR0aGlzLT5yZWZlcmVyOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MjMsNiArNjQxLDM0IEBACiAJCXJldHVybiBpbl9hcnJheShzdHJ0b2xvd2VyKCRjaGFyc2V0KSwgJHRoaXMtPmNoYXJzZXRzKCksIFRSVUUpOwogCX0KIAorCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBQYXJzZSBhIGN1c3RvbSB1c2VyLWFnZW50IHN0cmluZworCSAqCisJICogQHBhcmFtCXN0cmluZwkkc3RyaW5nCisJICogQHJldHVybgl2b2lkCisJICovCisJcHVibGljIGZ1bmN0aW9uIHBhcnNlKCRzdHJpbmcpCisJeworCQkvLyBSZXNldCB2YWx1ZXMKKwkJJHRoaXMtPmlzX2Jyb3dzZXIgPSBGQUxTRTsKKwkJJHRoaXMtPmlzX3JvYm90ID0gRkFMU0U7CisJCSR0aGlzLT5pc19tb2JpbGUgPSBGQUxTRTsKKwkJJHRoaXMtPmJyb3dzZXIgPSAnJzsKKwkJJHRoaXMtPnZlcnNpb24gPSAnJzsKKwkJJHRoaXMtPm1vYmlsZSA9ICcnOworCQkkdGhpcy0+cm9ib3QgPSAnJzsKKworCQkvLyBTZXQgdGhlIG5ldyB1c2VyLWFnZW50IHN0cmluZyBhbmQgcGFyc2UgaXQsIHVubGVzcyBlbXB0eQorCQkkdGhpcy0+YWdlbnQgPSAkc3RyaW5nOworCisJCWlmICggISBlbXB0eSgkc3RyaW5nKSkKKwkJeworCQkJJHRoaXMtPl9jb21waWxlX2RhdGEoKTsKKwkJfQorCX0KKwogfQogCiAvKiBFbmQgb2YgZmlsZSBVc2VyX2FnZW50LnBocCAqLwpkaWZmIC0tZ2l0IGEvc3lzdGVtL2xpYnJhcmllcy9YbWxycGMucGhwIGIvc3lzdGVtL2xpYnJhcmllcy9YbWxycGMucGhwCmluZGV4IDE2YzViMGUuLmQwZjZkODMgMTAwNjQ0Ci0tLSBhL3N5c3RlbS9saWJyYXJpZXMvWG1scnBjLnBocAorKysgYi9zeXN0ZW0vbGlicmFyaWVzL1htbHJwYy5waHAKQEAgLTM0OCw2ICszNDgsMTEgQEAKIAogCQkkcGFydHMgPSBwYXJzZV91cmwoJHVybCk7CiAKKwkJaWYgKGlzc2V0KCRwYXJ0c1sndXNlciddLCAkcGFydHNbJ3Bhc3MnXSkpCisJCXsKKwkJCSRwYXJ0c1snaG9zdCddID0gJHBhcnRzWyd1c2VyJ10uJzonLiRwYXJ0c1sncGFzcyddLidAJy4kcGFydHNbJ2hvc3QnXTsKKwkJfQorCiAJCSRwYXRoID0gaXNzZXQoJHBhcnRzWydwYXRoJ10pID8gJHBhcnRzWydwYXRoJ10gOiAnLyc7CiAKIAkJaWYgKCAhIGVtcHR5KCRwYXJ0c1sncXVlcnknXSkpCkBAIC01NjksNiArNTc0LDIxIEBACiAJcHVibGljICRwb3J0CQkJPSA4MDsKIAogCS8qKgorCSAqCisJICogU2VydmVyIHVzZXJuYW1lCisJICoKKwkgKiBAdmFyCXN0cmluZworCSAqLworCXB1YmxpYyAkdXNlcm5hbWU7CisKKwkvKioKKwkgKiBTZXJ2ZXIgcGFzc3dvcmQKKwkgKgorCSAqIEB2YXIJc3RyaW5nCisJICovCisJcHVibGljICRwYXNzd29yZDsKKworCS8qKgogCSAqIFByb3h5IGhvc3RuYW1lCiAJICoKIAkgKiBAdmFyCXN0cmluZwpAQCAtNjI2LDggKzY0NiwxNiBAQAogCXsKIAkJcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogCisJCSR1cmwgPSBwYXJzZV91cmwoJ2h0dHA6Ly8nLiRzZXJ2ZXIpOworCisJCWlmIChpc3NldCgkdXJsWyd1c2VyJ10sICR1cmxbJ3Bhc3MnXSkpCisJCXsKKwkJCSR0aGlzLT51c2VybmFtZSA9ICR1cmxbJ3VzZXInXTsKKwkJCSR0aGlzLT5wYXNzd29yZCA9ICR1cmxbJ3Bhc3MnXTsKKwkJfQorCiAJCSR0aGlzLT5wb3J0ID0gJHBvcnQ7Ci0JCSR0aGlzLT5zZXJ2ZXIgPSAkc2VydmVyOworCQkkdGhpcy0+c2VydmVyID0gJHVybFsnaG9zdCddOwogCQkkdGhpcy0+cGF0aCA9ICRwYXRoOwogCQkkdGhpcy0+cHJveHkgPSAkcHJveHk7CiAJCSR0aGlzLT5wcm94eV9wb3J0ID0gJHByb3h5X3BvcnQ7CkBAIC02OTEsMTEgKzcxOSwyMCBAQAogCQkkb3AgPSAnUE9TVCAnLiR0aGlzLT5wYXRoLicgSFRUUC8xLjAnLiRyCiAJCQkuJ0hvc3Q6ICcuJHRoaXMtPnNlcnZlci4kcgogCQkJLidDb250ZW50LVR5cGU6IHRleHQveG1sJy4kcgorCQkJLihpc3NldCgkdGhpcy0+dXNlcm5hbWUsICR0aGlzLT5wYXNzd29yZCkgPyAnQXV0aG9yaXphdGlvbjogQmFzaWMgJy5iYXNlNjRfZW5jb2RlKCR0aGlzLT51c2VybmFtZS4nOicuJHRoaXMtPnBhc3N3b3JkKS4kciA6ICcnKQogCQkJLidVc2VyLUFnZW50OiAnLiR0aGlzLT54bWxycGNOYW1lLiRyCiAJCQkuJ0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkbXNnLT5wYXlsb2FkKS4kci4kcgogCQkJLiRtc2ctPnBheWxvYWQ7CiAKLQkJaWYgKCAhIGZ3cml0ZSgkZnAsICRvcCwgc3RybGVuKCRvcCkpKQorCQlmb3IgKCR3cml0dGVuID0gMCwgJGxlbmd0aCA9IHN0cmxlbigkb3ApOyAkd3JpdHRlbiA8ICRsZW5ndGg7ICR3cml0dGVuICs9ICRyZXN1bHQpCisJCXsKKwkJCWlmICgoJHJlc3VsdCA9IGZ3cml0ZSgkZnAsIHN1YnN0cigkb3AsICR3cml0dGVuKSkpID09PSBGQUxTRSkKKwkJCXsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICgkcmVzdWx0ID09PSBGQUxTRSkKIAkJewogCQkJZXJyb3JfbG9nKCR0aGlzLT54bWxycGNzdHJbJ2h0dHBfZXJyb3InXSk7CiAJCQlyZXR1cm4gbmV3IFhNTF9SUENfUmVzcG9uc2UoMCwgJHRoaXMtPnhtbHJwY2VyclsnaHR0cF9lcnJvciddLCAkdGhpcy0+eG1scnBjc3RyWydodHRwX2Vycm9yJ10pOwpAQCAtODU1LDEwICs4OTIsMTAgQEAKIAkvKioKIAkgKiBEZWNvZGUKIAkgKgotCSAqIEBwYXJhbQltaXhlZAorCSAqIEBwYXJhbQltaXhlZAkkYXJyYXkKIAkgKiBAcmV0dXJuCWFycmF5CiAJICovCi0JcHVibGljIGZ1bmN0aW9uIGRlY29kZSgkYXJyYXkgPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKCRhcnJheSA9IE5VTEwpCiAJewogCQkkQ0kgPSYgZ2V0X2luc3RhbmNlKCk7CiAKQEAgLTg3MCw5ICs5MDcsOSBAQAogCQkJCXsKIAkJCQkJJGFycmF5WyRrZXldID0gJHRoaXMtPmRlY29kZSgkYXJyYXlbJGtleV0pOwogCQkJCX0KLQkJCQllbHNlCisJCQkJZWxzZWlmICgkdGhpcy0+eHNzX2NsZWFuKQogCQkJCXsKLQkJCQkJJGFycmF5WyRrZXldID0gKCR0aGlzLT54c3NfY2xlYW4pID8gJENJLT5zZWN1cml0eS0+eHNzX2NsZWFuKCRhcnJheVska2V5XSkgOiAkYXJyYXlbJGtleV07CisJCQkJCSRhcnJheVska2V5XSA9ICRDSS0+c2VjdXJpdHktPnhzc19jbGVhbigkYXJyYXlbJGtleV0pOwogCQkJCX0KIAkJCX0KIApAQCAtODg1LDkgKzkyMiw5IEBACiAJCXsKIAkJCSRyZXN1bHQgPSAkdGhpcy0+ZGVjb2RlKCRyZXN1bHQpOwogCQl9Ci0JCWVsc2UKKwkJZWxzZWlmICgkdGhpcy0+eHNzX2NsZWFuKQogCQl7Ci0JCQkkcmVzdWx0ID0gKCR0aGlzLT54c3NfY2xlYW4pID8gJENJLT5zZWN1cml0eS0+eHNzX2NsZWFuKCRyZXN1bHQpIDogJHJlc3VsdDsKKwkJCSRyZXN1bHQgPSAkQ0ktPnNlY3VyaXR5LT54c3NfY2xlYW4oJHJlc3VsdCk7CiAJCX0KIAogCQlyZXR1cm4gJHJlc3VsdDsKQEAgLTEwODQsMTUgKzExMjEsMTUgQEAKIAkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAkJJHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCR0aGlzLT54bWxycGNfZGVmZW5jb2RpbmcpOwotCi0JCSR0aGlzLT54aFskcGFyc2VyXSA9IGFycmF5KAotCQkJCQkJJ2lzZicJCT0+IDAsCi0JCQkJCQknYWMnCQk9PiAnJywKLQkJCQkJCSdoZWFkZXJzJwk9PiBhcnJheSgpLAotCQkJCQkJJ3N0YWNrJwkJPT4gYXJyYXkoKSwKLQkJCQkJCSd2YWx1ZXN0YWNrJwk9PiBhcnJheSgpLAotCQkJCQkJJ2lzZl9yZWFzb24nCT0+IDAKLQkJCQkJKTsKKwkJJHBuYW1lID0gKHN0cmluZykgJHBhcnNlcjsKKwkJJHRoaXMtPnhoWyRwbmFtZV0gPSBhcnJheSgKKwkJCSdpc2YnCQk9PiAwLAorCQkJJ2FjJwkJPT4gJycsCisJCQknaGVhZGVycycJPT4gYXJyYXkoKSwKKwkJCSdzdGFjaycJCT0+IGFycmF5KCksCisJCQkndmFsdWVzdGFjaycJPT4gYXJyYXkoKSwKKwkJCSdpc2ZfcmVhc29uJwk9PiAwCisJCSk7CiAKIAkJeG1sX3NldF9vYmplY3QoJHBhcnNlciwgJHRoaXMpOwogCQl4bWxfcGFyc2VyX3NldF9vcHRpb24oJHBhcnNlciwgWE1MX09QVElPTl9DQVNFX0ZPTERJTkcsIFRSVUUpOwpAQCAtMTEwOCw3ICsxMTQ1LDcgQEAKIAkJCXsKIAkJCQlicmVhazsKIAkJCX0KLQkJCSR0aGlzLT54aFskcGFyc2VyXVsnaGVhZGVycyddW10gPSAkbGluZTsKKwkJCSR0aGlzLT54aFskcG5hbWVdWydoZWFkZXJzJ11bXSA9ICRsaW5lOwogCQl9CiAJCSRkYXRhID0gaW1wbG9kZSgiXHJcbiIsICRsaW5lcyk7CiAKQEAgLTExMjYsMTggKzExNjMsMTggQEAKIAkJeG1sX3BhcnNlcl9mcmVlKCRwYXJzZXIpOwogCiAJCS8vIEdvdCBvdXJzZWx2ZXMgc29tZSBiYWRuZXNzLCBpdCBzZWVtcwotCQlpZiAoJHRoaXMtPnhoWyRwYXJzZXJdWydpc2YnXSA+IDEpCisJCWlmICgkdGhpcy0+eGhbJHBuYW1lXVsnaXNmJ10gPiAxKQogCQl7CiAJCQlpZiAoJHRoaXMtPmRlYnVnID09PSBUUlVFKQogCQkJewotCQkJCWVjaG8gIi0tLUludmFsaWQgUmV0dXJuLS0tXG4iLiR0aGlzLT54aFskcGFyc2VyXVsnaXNmX3JlYXNvbiddLiItLS1JbnZhbGlkIFJldHVybi0tLVxuXG4iOworCQkJCWVjaG8gIi0tLUludmFsaWQgUmV0dXJuLS0tXG4iLiR0aGlzLT54aFskcG5hbWVdWydpc2ZfcmVhc29uJ10uIi0tLUludmFsaWQgUmV0dXJuLS0tXG5cbiI7CiAJCQl9CiAKLQkJCXJldHVybiBuZXcgWE1MX1JQQ19SZXNwb25zZSgwLCAkdGhpcy0+eG1scnBjZXJyWydpbnZhbGlkX3JldHVybiddLCAkdGhpcy0+eG1scnBjc3RyWydpbnZhbGlkX3JldHVybiddLicgJy4kdGhpcy0+eGhbJHBhcnNlcl1bJ2lzZl9yZWFzb24nXSk7CisJCQlyZXR1cm4gbmV3IFhNTF9SUENfUmVzcG9uc2UoMCwgJHRoaXMtPnhtbHJwY2VyclsnaW52YWxpZF9yZXR1cm4nXSwgJHRoaXMtPnhtbHJwY3N0clsnaW52YWxpZF9yZXR1cm4nXS4nICcuJHRoaXMtPnhoWyRwbmFtZV1bJ2lzZl9yZWFzb24nXSk7CiAJCX0KLQkJZWxzZWlmICggISBpc19vYmplY3QoJHRoaXMtPnhoWyRwYXJzZXJdWyd2YWx1ZSddKSkKKwkJZWxzZWlmICggISBpc19vYmplY3QoJHRoaXMtPnhoWyRwbmFtZV1bJ3ZhbHVlJ10pKQogCQl7Ci0JCQlyZXR1cm4gbmV3IFhNTF9SUENfUmVzcG9uc2UoMCwgJHRoaXMtPnhtbHJwY2VyclsnaW52YWxpZF9yZXR1cm4nXSwgJHRoaXMtPnhtbHJwY3N0clsnaW52YWxpZF9yZXR1cm4nXS4nICcuJHRoaXMtPnhoWyRwYXJzZXJdWydpc2ZfcmVhc29uJ10pOworCQkJcmV0dXJuIG5ldyBYTUxfUlBDX1Jlc3BvbnNlKDAsICR0aGlzLT54bWxycGNlcnJbJ2ludmFsaWRfcmV0dXJuJ10sICR0aGlzLT54bWxycGNzdHJbJ2ludmFsaWRfcmV0dXJuJ10uJyAnLiR0aGlzLT54aFskcG5hbWVdWydpc2ZfcmVhc29uJ10pOwogCQl9CiAKIAkJLy8gRGlzcGxheSBYTUwgY29udGVudCBmb3IgZGVidWdnaW5nCkBAIC0xMTQ1LDEwICsxMTgyLDEwIEBACiAJCXsKIAkJCWVjaG8gJzxwcmU+JzsKIAotCQkJaWYgKGNvdW50KCR0aGlzLT54aFskcGFyc2VyXVsnaGVhZGVycyddID4gMCkpCisJCQlpZiAoY291bnQoJHRoaXMtPnhoWyRwbmFtZV1bJ2hlYWRlcnMnXSA+IDApKQogCQkJewogCQkJCWVjaG8gIi0tLUhFQURFUlMtLS1cbiI7Ci0JCQkJZm9yZWFjaCAoJHRoaXMtPnhoWyRwYXJzZXJdWydoZWFkZXJzJ10gYXMgJGhlYWRlcikKKwkJCQlmb3JlYWNoICgkdGhpcy0+eGhbJHBuYW1lXVsnaGVhZGVycyddIGFzICRoZWFkZXIpCiAJCQkJewogCQkJCQllY2hvICRoZWFkZXIuIlxuIjsKIAkJCQl9CkBAIC0xMTU2LDEzICsxMTkzLDEzIEBACiAJCQl9CiAKIAkJCWVjaG8gIi0tLURBVEEtLS1cbiIuaHRtbHNwZWNpYWxjaGFycygkZGF0YSkuIlxuLS0tRU5EIERBVEEtLS1cblxuLS0tUEFSU0VELS0tXG4iOwotCQkJdmFyX2R1bXAoJHRoaXMtPnhoWyRwYXJzZXJdWyd2YWx1ZSddKTsKKwkJCXZhcl9kdW1wKCR0aGlzLT54aFskcG5hbWVdWyd2YWx1ZSddKTsKIAkJCWVjaG8gIlxuLS0tRU5EIFBBUlNFRC0tLTwvcHJlPiI7CiAJCX0KIAogCQkvLyBTZW5kIHJlc3BvbnNlCi0JCSR2ID0gJHRoaXMtPnhoWyRwYXJzZXJdWyd2YWx1ZSddOwotCQlpZiAoJHRoaXMtPnhoWyRwYXJzZXJdWydpc2YnXSkKKwkJJHYgPSAkdGhpcy0+eGhbJHBuYW1lXVsndmFsdWUnXTsKKwkJaWYgKCR0aGlzLT54aFskcG5hbWVdWydpc2YnXSkKIAkJewogCQkJJGVycm5vX3YgPSAkdi0+bWVbJ3N0cnVjdCddWydmYXVsdENvZGUnXTsKIAkJCSRlcnJzdHJfdiA9ICR2LT5tZVsnc3RydWN0J11bJ2ZhdWx0U3RyaW5nJ107CkBAIC0xMTgxLDcgKzEyMTgsNyBAQAogCQkJJHIgPSBuZXcgWE1MX1JQQ19SZXNwb25zZSgkdik7CiAJCX0KIAotCQkkci0+aGVhZGVycyA9ICR0aGlzLT54aFskcGFyc2VyXVsnaGVhZGVycyddOworCQkkci0+aGVhZGVycyA9ICR0aGlzLT54aFskcG5hbWVdWydoZWFkZXJzJ107CiAJCXJldHVybiAkcjsKIAl9CiAKQEAgLTEyMTIsNiArMTI0OSw4IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIG9wZW5fdGFnKCR0aGVfcGFyc2VyLCAkbmFtZSkKIAl7CisJCSR0aGVfcGFyc2VyID0gKHN0cmluZykgJHRoZV9wYXJzZXI7CisKIAkJLy8gSWYgaW52YWxpZCBuZXN0aW5nLCB0aGVuIHJldHVybgogCQlpZiAoJHRoaXMtPnhoWyR0aGVfcGFyc2VyXVsnaXNmJ10gPiAxKSByZXR1cm47CiAKQEAgLTEzMTEsNiArMTM1MCw4IEBACiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGNsb3NpbmdfdGFnKCR0aGVfcGFyc2VyLCAkbmFtZSkKIAl7CisJCSR0aGVfcGFyc2VyID0gKHN0cmluZykgJHRoZV9wYXJzZXI7CisKIAkJaWYgKCR0aGlzLT54aFskdGhlX3BhcnNlcl1bJ2lzZiddID4gMSkgcmV0dXJuOwogCiAJCS8vIFJlbW92ZSBjdXJyZW50IGVsZW1lbnQgZnJvbSBzdGFjayBhbmQgc2V0IHZhcmlhYmxlCkBAIC0xNDQzLDYgKzE0ODQsOCBAQAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBjaGFyYWN0ZXJfZGF0YSgkdGhlX3BhcnNlciwgJGRhdGEpCiAJeworCQkkdGhlX3BhcnNlciA9IChzdHJpbmcpICR0aGVfcGFyc2VyOworCiAJCWlmICgkdGhpcy0+eGhbJHRoZV9wYXJzZXJdWydpc2YnXSA+IDEpIHJldHVybjsgLy8gWE1MIEZhdWx0IGZvdW5kIGFscmVhZHkKIAogCQkvLyBJZiBhIHZhbHVlIGhhcyBub3QgYmVlbiBmb3VuZApAQCAtMTQ4MCwxNCArMTUyMywxNCBAQAogCS8qKgogCSAqIE91dHB1dCBwYXJhbWV0ZXJzCiAJICoKLQkgKiBAcGFyYW0JYXJyYXkKKwkgKiBAcGFyYW0JYXJyYXkJJGFycmF5CiAJICogQHJldHVybglhcnJheQogCSAqLwotCXB1YmxpYyBmdW5jdGlvbiBvdXRwdXRfcGFyYW1ldGVycygkYXJyYXkgPSBGQUxTRSkKKwlwdWJsaWMgZnVuY3Rpb24gb3V0cHV0X3BhcmFtZXRlcnMoYXJyYXkgJGFycmF5ID0gYXJyYXkoKSkKIAl7CiAJCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKIAotCQlpZiAoaXNfYXJyYXkoJGFycmF5KSkKKwkJaWYgKCAhIGVtcHR5KCRhcnJheSkpCiAJCXsKIAkJCXdoaWxlIChsaXN0KCRrZXkpID0gZWFjaCgkYXJyYXkpKQogCQkJewpAQCAtMTQ5NSwxMSArMTUzOCwxMSBAQAogCQkJCXsKIAkJCQkJJGFycmF5WyRrZXldID0gJHRoaXMtPm91dHB1dF9wYXJhbWV0ZXJzKCRhcnJheVska2V5XSk7CiAJCQkJfQotCQkJCWVsc2UKKwkJCQllbHNlaWYgKCRrZXkgIT09ICdiaXRzJyAmJiAkdGhpcy0+eHNzX2NsZWFuKQogCQkJCXsKIAkJCQkJLy8gJ2JpdHMnIGlzIGZvciB0aGUgTWV0YVdlYmxvZyBBUEkgaW1hZ2UgYml0cwogCQkJCQkvLyBAdG9kbyAtIHRoaXMgbmVlZHMgdG8gYmUgbWFkZSBtb3JlIGdlbmVyYWwgcHVycG9zZQotCQkJCQkkYXJyYXlbJGtleV0gPSAoJGtleSA9PT0gJ2JpdHMnIE9SICR0aGlzLT54c3NfY2xlYW4gPT09IEZBTFNFKSA/ICRhcnJheVska2V5XSA6ICRDSS0+c2VjdXJpdHktPnhzc19jbGVhbigkYXJyYXlbJGtleV0pOworCQkJCQkkYXJyYXlbJGtleV0gPSAkQ0ktPnNlY3VyaXR5LT54c3NfY2xlYW4oJGFycmF5WyRrZXldKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTE2ODQsNyArMTcyNyw3IEBACiAJewogCQlpZiAoJHRoaXMtPm15dHlwZSAhPT0gMCkKIAkJewotCQkJZWNobyAnPHN0cm9uZz5YTUxfUlBDX1ZhbHVlczwvc3Ryb25nPjogYWxyZWFkeSBpbml0aWFsaXplZCBhcyBhIFsnIC4gJHRoaXMtPmtpbmRPZigpIC4gJ108YnIgLz4nOworCQkJZWNobyAnPHN0cm9uZz5YTUxfUlBDX1ZhbHVlczwvc3Ryb25nPjogYWxyZWFkeSBpbml0aWFsaXplZCBhcyBhIFsnLiR0aGlzLT5raW5kT2YoKS4nXTxiciAvPic7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0xNzA1LDcgKzE3NDgsNyBAQAogCXsKIAkJaWYgKCR0aGlzLT5teXR5cGUgIT09IDApCiAJCXsKLQkJCWVjaG8gJzxzdHJvbmc+WE1MX1JQQ19WYWx1ZXM8L3N0cm9uZz46IGFscmVhZHkgaW5pdGlhbGl6ZWQgYXMgYSBbJyAuICR0aGlzLT5raW5kT2YoKSAuICddPGJyIC8+JzsKKwkJCWVjaG8gJzxzdHJvbmc+WE1MX1JQQ19WYWx1ZXM8L3N0cm9uZz46IGFscmVhZHkgaW5pdGlhbGl6ZWQgYXMgYSBbJy4kdGhpcy0+a2luZE9mKCkuJ108YnIgLz4nOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJJHRoaXMtPm15dHlwZSA9ICR0aGlzLT54bWxycGNUeXBlc1snc3RydWN0J107CmRpZmYgLS1naXQgYS9zeXN0ZW0vbGlicmFyaWVzL1htbHJwY3MucGhwIGIvc3lzdGVtL2xpYnJhcmllcy9YbWxycGNzLnBocAppbmRleCBkMjYzZDc4Li41MGZmNDIzIDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL1htbHJwY3MucGhwCisrKyBiL3N5c3RlbS9saWJyYXJpZXMvWG1scnBjcy5waHAKQEAgLTM4NCwxNyArMzg0LDEzIEBACiAJCQl7CiAJCQkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jKGFycmF5KCR0aGlzLCAkbWV0aG9kX3BhcnRzWzFdKSwgJG0pOwogCQkJfQorCQkJZWxzZWlmICgkdGhpcy0+b2JqZWN0ID09PSBGQUxTRSkKKwkJCXsKKwkJCQlyZXR1cm4gZ2V0X2luc3RhbmNlKCktPiRtZXRob2RfcGFydHNbMV0oJG0pOworCQkJfQogCQkJZWxzZQogCQkJewotCQkJCWlmICgkdGhpcy0+b2JqZWN0ID09PSBGQUxTRSkKLQkJCQl7Ci0JCQkJCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKLQkJCQkJcmV0dXJuICRDSS0+JG1ldGhvZF9wYXJ0c1sxXSgkbSk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXJldHVybiAkdGhpcy0+b2JqZWN0LT4kbWV0aG9kX3BhcnRzWzFdKCRtKTsKLQkJCQl9CisJCQkJcmV0dXJuICR0aGlzLT5vYmplY3QtPiRtZXRob2RfcGFydHNbMV0oJG0pOwogCQkJfQogCQl9CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3N5c3RlbS9saWJyYXJpZXMvWmlwLnBocCBiL3N5c3RlbS9saWJyYXJpZXMvWmlwLnBocAppbmRleCA2NjA4ZjA1Li5iMTBiMGJiIDEwMDY0NAotLS0gYS9zeXN0ZW0vbGlicmFyaWVzL1ppcC5waHAKKysrIGIvc3lzdGVtL2xpYnJhcmllcy9aaXAucGhwCkBAIC0xMDMsMTIgKzEwMywxMiBAQAogCSAqCiAJICogTGV0cyB5b3UgYWRkIGEgdmlydHVhbCBkaXJlY3RvcnkgaW50byB3aGljaCB5b3UgY2FuIHBsYWNlIGZpbGVzLgogCSAqCi0JICogQHBhcmFtCW1peGVkCXRoZSBkaXJlY3RvcnkgbmFtZS4gQ2FuIGJlIHN0cmluZyBvciBhcnJheQorCSAqIEBwYXJhbQltaXhlZAkkZGlyZWN0b3J5CXRoZSBkaXJlY3RvcnkgbmFtZS4gQ2FuIGJlIHN0cmluZyBvciBhcnJheQogCSAqIEByZXR1cm4Jdm9pZAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBhZGRfZGlyKCRkaXJlY3RvcnkpCiAJewotCQlmb3JlYWNoICggKGFycmF5KSAkZGlyZWN0b3J5IGFzICRkaXIpCisJCWZvcmVhY2ggKChhcnJheSkgJGRpcmVjdG9yeSBhcyAkZGlyKQogCQl7CiAJCQlpZiAoICEgcHJlZ19tYXRjaCgnfC4rLyR8JywgJGRpcikpCiAJCQl7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAkgKgogCSAqIElmIHRoaXMgaXMgYSBuZXdseSBjcmVhdGVkIGZpbGUvZGlyLCB3ZSB3aWxsIHNldCB0aGUgdGltZSB0byAnbm93JwogCSAqCi0JICogQHBhcmFtCXN0cmluZwlwYXRoIHRvIGZpbGUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRkaXIJcGF0aCB0byBmaWxlCiAJICogQHJldHVybglhcnJheQlmaWxlbXRpbWUvZmlsZW1kYXRlCiAJICovCiAJcHJvdGVjdGVkIGZ1bmN0aW9uIF9nZXRfbW9kX3RpbWUoJGRpcikKQEAgLTE0Niw5ICsxNDYsOSBAQAogCS8qKgogCSAqIEFkZCBEaXJlY3RvcnkKIAkgKgotCSAqIEBwYXJhbQlzdHJpbmcJdGhlIGRpcmVjdG9yeSBuYW1lCi0JICogQHBhcmFtCWludAotCSAqIEBwYXJhbQlpbnQKKwkgKiBAcGFyYW0Jc3RyaW5nCSRkaXIJdGhlIGRpcmVjdG9yeSBuYW1lCisJICogQHBhcmFtCWludAkkZmlsZV9tdGltZQorCSAqIEBwYXJhbQlpbnQJJGZpbGVfbWRhdGUKIAkgKiBAcmV0dXJuCXZvaWQKIAkgKi8KIAlwcm90ZWN0ZWQgZnVuY3Rpb24gX2FkZF9kaXIoJGRpciwgJGZpbGVfbXRpbWUsICRmaWxlX21kYXRlKQpAQCAtMTk5LDggKzE5OSw4IEBACiAJICogaW4gdGhlIGZpbGVuYW1lIGl0IHdpbGwgYmUgcGxhY2VkIHdpdGhpbiBhIGRpcmVjdG9yeS4gTWFrZQogCSAqIHN1cmUgeW91IHVzZSBhZGRfZGlyKCkgZmlyc3QgdG8gY3JlYXRlIHRoZSBmb2xkZXIuCiAJICoKLQkgKiBAcGFyYW0JbWl4ZWQKLQkgKiBAcGFyYW0Jc3RyaW5nCisJICogQHBhcmFtCW1peGVkCSRmaWxlcGF0aAlBIHNpbmdsZSBmaWxlcGF0aCBvciBhbiBhcnJheSBvZiBmaWxlID0+IGRhdGEgcGFpcnMKKwkgKiBAcGFyYW0Jc3RyaW5nCSRkYXRhCQlTaW5nbGUgZmlsZSBjb250ZW50cwogCSAqIEByZXR1cm4Jdm9pZAogCSAqLwogCXB1YmxpYyBmdW5jdGlvbiBhZGRfZGF0YSgkZmlsZXBhdGgsICRkYXRhID0gTlVMTCkKQEAgLTIyNSwxMCArMjI1LDEwIEBACiAJLyoqCiAJICogQWRkIERhdGEgdG8gWmlwCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCXRoZSBmaWxlIG5hbWUvcGF0aAotCSAqIEBwYXJhbQlzdHJpbmcJdGhlIGRhdGEgdG8gYmUgZW5jb2RlZAotCSAqIEBwYXJhbQlpbnQKLQkgKiBAcGFyYW0JaW50CisJICogQHBhcmFtCXN0cmluZwkkZmlsZXBhdGgJdGhlIGZpbGUgbmFtZS9wYXRoCisJICogQHBhcmFtCXN0cmluZwkkZGF0YQl0aGUgZGF0YSB0byBiZSBlbmNvZGVkCisJICogQHBhcmFtCWludAkkZmlsZV9tdGltZQorCSAqIEBwYXJhbQlpbnQJJGZpbGVfbWRhdGUKIAkgKiBAcmV0dXJuCXZvaWQKIAkgKi8KIAlwcm90ZWN0ZWQgZnVuY3Rpb24gX2FkZF9kYXRhKCRmaWxlcGF0aCwgJGRhdGEsICRmaWxlX210aW1lLCAkZmlsZV9tZGF0ZSkKQEAgLTI3OCwyMyArMjc4LDI2IEBACiAJLyoqCiAJICogUmVhZCB0aGUgY29udGVudHMgb2YgYSBmaWxlIGFuZCBhZGQgaXQgdG8gdGhlIHppcAogCSAqCi0JICogQHBhcmFtCXN0cmluZwotCSAqIEBwYXJhbQlib29sCisJICogQHBhcmFtCXN0cmluZwkkcGF0aAorCSAqIEBwYXJhbQlib29sCSRhcmNoaXZlX2ZpbGVwYXRoCiAJICogQHJldHVybglib29sCiAJICovCi0JcHVibGljIGZ1bmN0aW9uIHJlYWRfZmlsZSgkcGF0aCwgJHByZXNlcnZlX2ZpbGVwYXRoID0gRkFMU0UpCisJcHVibGljIGZ1bmN0aW9uIHJlYWRfZmlsZSgkcGF0aCwgJGFyY2hpdmVfZmlsZXBhdGggPSBGQUxTRSkKIAl7Ci0JCWlmICggISBmaWxlX2V4aXN0cygkcGF0aCkpCisJCWlmIChmaWxlX2V4aXN0cygkcGF0aCkgJiYgRkFMU0UgIT09ICgkZGF0YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRwYXRoKSkpCiAJCXsKLQkJCXJldHVybiBGQUxTRTsKLQkJfQotCi0JCWlmIChGQUxTRSAhPT0gKCRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJHBhdGgpKSkKLQkJewotCQkJJG5hbWUgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRwYXRoKTsKLQkJCWlmICgkcHJlc2VydmVfZmlsZXBhdGggPT09IEZBTFNFKQorCQkJaWYgKGlzX3N0cmluZygkYXJjaGl2ZV9maWxlcGF0aCkpCiAJCQl7Ci0JCQkJJG5hbWUgPSBwcmVnX3JlcGxhY2UoJ3wuKi8oLispfCcsICdcXDEnLCAkbmFtZSk7CisJCQkJJG5hbWUgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRhcmNoaXZlX2ZpbGVwYXRoKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkbmFtZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHBhdGgpOworCisJCQkJaWYgKCRwcmVzZXJ2ZV9maWxlcGF0aCA9PT0gRkFMU0UpCisJCQkJeworCQkJCQkkbmFtZSA9IHByZWdfcmVwbGFjZSgnfC4qLyguKyl8JywgJ1xcMScsICRuYW1lKTsKKwkJCQl9CiAJCQl9CiAKIAkJCSR0aGlzLT5hZGRfZGF0YSgkbmFtZSwgJGRhdGEpOwpAQCAtMzEzLDkgKzMxNiw5IEBACiAJICogc3ViLWZvbGRlcnMpIGFuZCBjcmVhdGVzIGEgemlwIGJhc2VkIG9uIGl0LiBXaGF0ZXZlciBkaXJlY3Rvcnkgc3RydWN0dXJlCiAJICogaXMgaW4gdGhlIG9yaWdpbmFsIGZpbGUgcGF0aCB3aWxsIGJlIHJlY3JlYXRlZCBpbiB0aGUgemlwIGZpbGUuCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCXBhdGggdG8gc291cmNlCi0JICogQHBhcmFtCWJvb2wKLQkgKiBAcGFyYW0JYm9vbAorCSAqIEBwYXJhbQlzdHJpbmcJJHBhdGgJcGF0aCB0byBzb3VyY2UgZGlyZWN0b3J5CisJICogQHBhcmFtCWJvb2wJJHByZXNlcnZlX2ZpbGVwYXRoCisJICogQHBhcmFtCXN0cmluZwkkcm9vdF9wYXRoCiAJICogQHJldHVybglib29sCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIHJlYWRfZGlyKCRwYXRoLCAkcHJlc2VydmVfZmlsZXBhdGggPSBUUlVFLCAkcm9vdF9wYXRoID0gTlVMTCkKQEAgLTM4OSw3ICszOTIsNyBAQAogCSAqCiAJICogTGV0cyB5b3Ugd3JpdGUgYSBmaWxlCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCXRoZSBmaWxlIG5hbWUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRmaWxlcGF0aAl0aGUgZmlsZSBuYW1lCiAJICogQHJldHVybglib29sCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGFyY2hpdmUoJGZpbGVwYXRoKQpAQCAtNDAwLDExICs0MDMsMTkgQEAKIAkJfQogCiAJCWZsb2NrKCRmcCwgTE9DS19FWCk7Ci0JCWZ3cml0ZSgkZnAsICR0aGlzLT5nZXRfemlwKCkpOworCisJCWZvciAoJHdyaXR0ZW4gPSAwLCAkZGF0YSA9ICR0aGlzLT5nZXRfemlwKCksICRsZW5ndGggPSBzdHJsZW4oJGRhdGEpOyAkd3JpdHRlbiA8ICRsZW5ndGg7ICR3cml0dGVuICs9ICRyZXN1bHQpCisJCXsKKwkJCWlmICgoJHJlc3VsdCA9IGZ3cml0ZSgkZnAsIHN1YnN0cigkZGF0YSwgJHdyaXR0ZW4pKSkgPT09IEZBTFNFKQorCQkJeworCQkJCWJyZWFrOworCQkJfQorCQl9CisKIAkJZmxvY2soJGZwLCBMT0NLX1VOKTsKIAkJZmNsb3NlKCRmcCk7CiAKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiBpc19pbnQoJHJlc3VsdCk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxMiw3ICs0MjMsNyBAQAogCS8qKgogCSAqIERvd25sb2FkCiAJICoKLQkgKiBAcGFyYW0Jc3RyaW5nCXRoZSBmaWxlIG5hbWUKKwkgKiBAcGFyYW0Jc3RyaW5nCSRmaWxlbmFtZQl0aGUgZmlsZSBuYW1lCiAJICogQHJldHVybgl2b2lkCiAJICovCiAJcHVibGljIGZ1bmN0aW9uIGRvd25sb2FkKCRmaWxlbmFtZSA9ICdiYWNrdXAuemlwJykKQEAgLTQyMiw4ICs0MzMsNyBAQAogCQkJJGZpbGVuYW1lIC49ICcuemlwJzsKIAkJfQogCi0JCSRDSSA9JiBnZXRfaW5zdGFuY2UoKTsKLQkJJENJLT5sb2FkLT5oZWxwZXIoJ2Rvd25sb2FkJyk7CisJCWdldF9pbnN0YW5jZSgpLT5sb2FkLT5oZWxwZXIoJ2Rvd25sb2FkJyk7CiAJCSRnZXRfemlwID0gJHRoaXMtPmdldF96aXAoKTsKIAkJJHppcF9jb250ZW50ID0mICRnZXRfemlwOwogCmRpZmYgLS1naXQgYS90ZXN0cy9jb2RlaWduaXRlci9jb3JlL0JlbmNobWFya190ZXN0LnBocCBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvQmVuY2htYXJrX3Rlc3QucGhwCmluZGV4IGEyMzliYTUuLjdmZDA3MjcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvQmVuY2htYXJrX3Rlc3QucGhwCisrKyBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvQmVuY2htYXJrX3Rlc3QucGhwCkBAIC0yNywxMCArMjcsMzQgQEAKIAkJJHRoaXMtPmFzc2VydEVtcHR5KCR0aGlzLT5iZW5jaG1hcmstPmVsYXBzZWRfdGltZSgndW5kZWZpbmVkX3BvaW50JykpOwogCiAJCSR0aGlzLT5iZW5jaG1hcmstPm1hcmsoJ2NvZGVfc3RhcnQnKTsKLQkJc2xlZXAoMSk7CiAJCSR0aGlzLT5iZW5jaG1hcmstPm1hcmsoJ2NvZGVfZW5kJyk7CiAKKwkJLy8gT3ZlcnJpZGUgdmFsdWVzLCBiZWNhdXNlIHRpbWUgaXNuJ3QgdGVzdGFibGUsIGJ1dCBtYWtlIHN1cmUgdGhlIG1hcmtlcnMgd2VyZSBzZXQKKwkJaWYgKGlzc2V0KCR0aGlzLT5iZW5jaG1hcmstPm1hcmtlclsnY29kZV9zdGFydCddKSAmJiBpc19mbG9hdCgkdGhpcy0+YmVuY2htYXJrLT5tYXJrZXJbJ2NvZGVfc3RhcnQnXSkpCisJCXsKKwkJCSR0aGlzLT5iZW5jaG1hcmstPm1hcmtlclsnY29kZV9zdGFydCddID0gMTM4OTk1NjE0NC4xOTQ0OworCQl9CisKKwkJaWYgKGlzc2V0KCR0aGlzLT5iZW5jaG1hcmstPm1hcmtlclsnY29kZV9lbmQnXSkgJiYgaXNfZmxvYXQoJHRoaXMtPmJlbmNobWFyay0+bWFya2VyWydjb2RlX2VuZCddKSkKKwkJeworCQkJJHRoaXMtPmJlbmNobWFyay0+bWFya2VyWydjb2RlX2VuZCddID0gMTM4OTk1NjE0NS4xOTQ2OworCQl9CisKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnMScsICR0aGlzLT5iZW5jaG1hcmstPmVsYXBzZWRfdGltZSgnY29kZV9zdGFydCcsICdjb2RlX2VuZCcsIDApKTsKIAkJJHRoaXMtPmFzc2VydEVxdWFscygnMS4wJywgJHRoaXMtPmJlbmNobWFyay0+ZWxhcHNlZF90aW1lKCdjb2RlX3N0YXJ0JywgJ2NvZGVfZW5kJywgMSkpOworCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCcxLjAwJywgJHRoaXMtPmJlbmNobWFyay0+ZWxhcHNlZF90aW1lKCdjb2RlX3N0YXJ0JywgJ2NvZGVfZW5kJywgMikpOworCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCcxLjAwMCcsICR0aGlzLT5iZW5jaG1hcmstPmVsYXBzZWRfdGltZSgnY29kZV9zdGFydCcsICdjb2RlX2VuZCcsIDMpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnMS4wMDAyJywgJHRoaXMtPmJlbmNobWFyay0+ZWxhcHNlZF90aW1lKCdjb2RlX3N0YXJ0JywgJ2NvZGVfZW5kJywgNCkpOworCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCcxLjAwMDInLCAkdGhpcy0+YmVuY2htYXJrLT5lbGFwc2VkX3RpbWUoJ2NvZGVfc3RhcnQnLCAnY29kZV9lbmQnKSk7CisKKwkJLy8gVGVzdCB3aXRoIG5vbi1leGlzdGluZyAybmQgbWFya2VyLCBidXQgYWdhaW4gLSB3ZSBuZWVkIHRvIG92ZXJyaWRlIHRoZSB2YWx1ZQorCQkkdGhpcy0+YmVuY2htYXJrLT5lbGFwc2VkX3RpbWUoJ2NvZGVfc3RhcnQnLCAnY29kZV9lbmQyJyk7CisJCWlmIChpc3NldCgkdGhpcy0+YmVuY2htYXJrLT5tYXJrZXJbJ2NvZGVfZW5kMiddKSAmJiBpc19mbG9hdCgkdGhpcy0+YmVuY2htYXJrLT5tYXJrZXJbJ2NvZGVfZW5kMiddKSkKKwkJeworCQkJJHRoaXMtPmJlbmNobWFyay0+bWFya2VyWydjb2RlX2VuZDInXSA9IDEzODk5NTYxNDYuMjA0NjsKKwkJfQorCisJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJzIuMDEwMicsICR0aGlzLT5iZW5jaG1hcmstPmVsYXBzZWRfdGltZSgnY29kZV9zdGFydCcsICdjb2RlX2VuZDInKSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvQ29uZmlnX3Rlc3QucGhwIGIvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9Db25maWdfdGVzdC5waHAKaW5kZXggZTNiZThhMy4uYmE5YTJjMCAxMDA2NDQKLS0tIGEvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9Db25maWdfdGVzdC5waHAKKysrIGIvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9Db25maWdfdGVzdC5waHAKQEAgLTI0LDE4ICsyNCwxOCBAQAogCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCR0aGlzLT5jZmdbJ2Jhc2VfdXJsJ10sICR0aGlzLT5jb25maWctPml0ZW0oJ2Jhc2VfdXJsJykpOwogCiAJCS8vIEJhZCBDb25maWcgdmFsdWUKLQkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5jb25maWctPml0ZW0oJ25vX2dvb2RfaXRlbScpKTsKKwkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmNvbmZpZy0+aXRlbSgnbm9fZ29vZF9pdGVtJykpOwogCiAJCS8vIEluZGV4Ci0JCSR0aGlzLT5hc3NlcnRGYWxzZSgkdGhpcy0+Y29uZmlnLT5pdGVtKCdub19nb29kX2l0ZW0nLCAnYmFkX2luZGV4JykpOwotCQkkdGhpcy0+YXNzZXJ0RmFsc2UoJHRoaXMtPmNvbmZpZy0+aXRlbSgnbm9fZ29vZF9pdGVtJywgJ2RlZmF1bHQnKSk7CisJCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5jb25maWctPml0ZW0oJ25vX2dvb2RfaXRlbScsICdiYWRfaW5kZXgnKSk7CisJCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5jb25maWctPml0ZW0oJ25vX2dvb2RfaXRlbScsICdkZWZhdWx0JykpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlwdWJsaWMgZnVuY3Rpb24gdGVzdF9zZXRfaXRlbSgpCiAJewotCQkkdGhpcy0+YXNzZXJ0RmFsc2UoJHRoaXMtPmNvbmZpZy0+aXRlbSgnbm90X3lldF9zZXQnKSk7CisJCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5jb25maWctPml0ZW0oJ25vdF95ZXRfc2V0JykpOwogCiAJCSR0aGlzLT5jb25maWctPnNldF9pdGVtKCdub3RfeWV0X3NldCcsICdpcyBzZXQnKTsKIAkJJHRoaXMtPmFzc2VydEVxdWFscygnaXMgc2V0JywgJHRoaXMtPmNvbmZpZy0+aXRlbSgnbm90X3lldF9zZXQnKSk7CkBAIC00Niw3ICs0Niw3IEBACiAJcHVibGljIGZ1bmN0aW9uIHRlc3Rfc2xhc2hfaXRlbSgpCiAJewogCQkvLyBCYWQgQ29uZmlnIHZhbHVlCi0JCSR0aGlzLT5hc3NlcnRGYWxzZSgkdGhpcy0+Y29uZmlnLT5zbGFzaF9pdGVtKCdub19nb29kX2l0ZW0nKSk7CisJCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5jb25maWctPnNsYXNoX2l0ZW0oJ25vX2dvb2RfaXRlbScpKTsKIAogCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCR0aGlzLT5jZmdbJ2Jhc2VfdXJsJ10sICR0aGlzLT5jb25maWctPnNsYXNoX2l0ZW0oJ2Jhc2VfdXJsJykpOwogCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCR0aGlzLT5jZmdbJ3N1YmNsYXNzX3ByZWZpeCddLicvJywgJHRoaXMtPmNvbmZpZy0+c2xhc2hfaXRlbSgnc3ViY2xhc3NfcHJlZml4JykpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9JbnB1dF90ZXN0LnBocCBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvSW5wdXRfdGVzdC5waHAKaW5kZXggNWNmMjVmZS4uOTU4MzNmYyAxMDA2NDQKLS0tIGEvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9JbnB1dF90ZXN0LnBocAorKysgYi90ZXN0cy9jb2RlaWduaXRlci9jb3JlL0lucHV0X3Rlc3QucGhwCkBAIC04MiwxMSArODIsMjEgQEAKIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlwdWJsaWMgZnVuY3Rpb24gdGVzdF9nZXRfcG9zdCgpCisJcHVibGljIGZ1bmN0aW9uIHRlc3RfcG9zdF9nZXQoKQogCXsKIAkJJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPSAnUE9TVCc7CiAJCSRfUE9TVFsnZm9vJ10gPSAnYmFyJzsKIAorCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCdiYXInLCAkdGhpcy0+aW5wdXQtPnBvc3RfZ2V0KCdmb28nKSk7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXB1YmxpYyBmdW5jdGlvbiB0ZXN0X2dldF9wb3N0KCkKKwl7CisJCSRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID0gJ0dFVCc7CisJCSRfR0VUWydmb28nXSA9ICdiYXInOworCiAJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJ2JhcicsICR0aGlzLT5pbnB1dC0+Z2V0X3Bvc3QoJ2ZvbycpKTsKIAl9CiAKQEAgLTEyOCwxMyArMTM4LDI0IEBACiAKIAlwdWJsaWMgZnVuY3Rpb24gdGVzdF92YWxpZF9pcCgpCiAJewotCQkkaXBfdjQgPSAnMTkyLjE4LjAuMSc7Ci0JCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5pbnB1dC0+dmFsaWRfaXAoJGlwX3Y0KSk7CisJCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5pbnB1dC0+dmFsaWRfaXAoJzE5Mi4xOC4wLjEnKSk7CisJCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5pbnB1dC0+dmFsaWRfaXAoJzE5Mi4xOC4wLjEnLCAnaXB2NCcpKTsKKwkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5pbnB1dC0+dmFsaWRfaXAoJzU1NS4wLjAuMCcpKTsKKwkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5pbnB1dC0+dmFsaWRfaXAoJzIwMDE6ZGI4OjA6ODVhMzo6YWMxZjo4MDAxJywgJ2lwdjQnKSk7CiAKLQkJJGlwX3Y2ID0gYXJyYXkoJzIwMDE6MGRiODowMDAwOjg1YTM6MDAwMDowMDAwOmFjMWY6ODAwMScsICcyMDAxOmRiODowOjg1YTM6MDowOmFjMWY6ODAwMScsICcyMDAxOmRiODowOjg1YTM6OmFjMWY6ODAwMScpOworCQkvLyB2NiB0ZXN0cworCQkkdGhpcy0+YXNzZXJ0RmFsc2UoJHRoaXMtPmlucHV0LT52YWxpZF9pcCgnMTkyLjE4LjAuMScsICdpcHY2JykpOworCisJCSRpcF92NiA9IGFycmF5KAorCQkJJzIwMDE6MGRiODowMDAwOjg1YTM6MDAwMDowMDAwOmFjMWY6ODAwMScsCisJCQknMjAwMTpkYjg6MDo4NWEzOjA6MDphYzFmOjgwMDEnLAorCQkJJzIwMDE6ZGI4OjA6ODVhMzo6YWMxZjo4MDAxJworCQkpOworCiAJCWZvcmVhY2ggKCRpcF92NiBhcyAkaXApCiAJCXsKIAkJCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5pbnB1dC0+dmFsaWRfaXAoJGlwKSk7CisJCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+aW5wdXQtPnZhbGlkX2lwKCRpcCwgJ2lwdjYnKSk7CiAJCX0KIAl9CiAKQEAgLTE2MSw0ICsxODIsMzQgQEAKIAkJJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPmlucHV0LT5pc19hamF4X3JlcXVlc3QoKSk7CiAJfQogCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXB1YmxpYyBmdW5jdGlvbiB0ZXN0X2lucHV0X3N0cmVhbSgpCisJeworCQkkdGhpcy0+bWFya1Rlc3RTa2lwcGVkKCdUT0RPOiBGaW5kIGEgd2F5IHRvIHRlc3QgaW5wdXQ6Ly8nKTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJcHVibGljIGZ1bmN0aW9uIHRlc3Rfc2V0X2Nvb2tpZSgpCisJeworCQkkdGhpcy0+bWFya1Rlc3RTa2lwcGVkKCdUT0RPOiBGaW5kIGEgd2F5IHRvIHRlc3QgSFRUUCBoZWFkZXJzJyk7CisJfQorCisJcHVibGljIGZ1bmN0aW9uIHRlc3RfaXBfYWRkcmVzcygpCisJeworCQkvLyAxMjcuMC4wLjEgaXMgc2V0IGluIG91ciBCb290c3RyYXAgZmlsZQorCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCcxMjcuMC4wLjEnLCAkdGhpcy0+aW5wdXQtPmlwX2FkZHJlc3MoKSk7CisKKwkJLy8gSW52YWxpZAorCQkkX1NFUlZFUlsnUkVNT1RFX0FERFInXSA9ICdpbnZhbGlkX2lwX2FkZHJlc3MnOworCQkkdGhpcy0+aW5wdXQtPmlwX2FkZHJlc3MgPSBGQUxTRTsgLy8gcmVzZXQgY2FjaGVkIHZhbHVlCisJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJzAuMC4wLjAnLCAkdGhpcy0+aW5wdXQtPmlwX2FkZHJlc3MoKSk7CisKKwkJLy8gVE9ETzogQWRkIHByb3h5X2lwcyB0ZXN0cworCisJCS8vIEJhY2sgdG8gcmVhbGl0eQorCQkkX1NFUlZFUlsnUkVNT1RFX0FERFInXSA9ICcxMjcuMC4wLjEnOyAvLyBiYWNrIHRvIHJlYWxpdHkKKwl9CisKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9jb2RlaWduaXRlci9jb3JlL0xvYWRlcl90ZXN0LnBocCBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvTG9hZGVyX3Rlc3QucGhwCmluZGV4IGFjMjY1NmUuLjc5OWJjZDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvTG9hZGVyX3Rlc3QucGhwCisrKyBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvTG9hZGVyX3Rlc3QucGhwCkBAIC0yOCwxOCArMjgsMTUgQEAKIAkJJHRoaXMtPmNpX3Zmc19jcmVhdGUodWNmaXJzdCgkbGliKSwgJzw/cGhwIGNsYXNzICcuJGNsYXNzLicgeyB9JywgJHRoaXMtPmNpX2Jhc2Vfcm9vdCwgJ2xpYnJhcmllcycpOwogCiAJCS8vIFRlc3QgaXNfbG9hZGVkIGZhaWwKLQkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5sb2FkLT5pc19sb2FkZWQoJGxpYikpOworCQkkdGhpcy0+YXNzZXJ0RmFsc2UoJHRoaXMtPmxvYWQtPmlzX2xvYWRlZCh1Y2ZpcnN0KCRsaWIpKSk7CiAKIAkJLy8gVGVzdCBsb2FkaW5nIGFzIGFuIGFycmF5LgotCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+bG9hZC0+bGlicmFyeShhcnJheSgkbGliKSkpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxpYnJhcnkoYXJyYXkoJGxpYikpKTsKIAkJJHRoaXMtPmFzc2VydFRydWUoY2xhc3NfZXhpc3RzKCRjbGFzcyksICRjbGFzcy4nIGRvZXMgbm90IGV4aXN0Jyk7CiAJCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRjbGFzcywgJGxpYiwgJHRoaXMtPmNpX29iaik7CiAKLQkJLy8gVGVzdCBubyBsaWIgZ2l2ZW4KLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoKSk7Ci0KIAkJLy8gVGVzdCBhIHN0cmluZyBnaXZlbiB0byBwYXJhbXMKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYiwgJyAnKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+bGlicmFyeSgkbGliLCAnICcpKTsKIAogCQkvLyBDcmVhdGUgbGlicmFyeSB3L28gY2xhc3MKIAkJJGxpYiA9ICdiYWRfdGVzdF9saWInOwpAQCAtNTAsNyArNDcsNyBAQAogCQkJJ1J1bnRpbWVFeGNlcHRpb24nLAogCQkJJ0NJIEVycm9yOiBVbmFibGUgdG8gbG9hZCB0aGUgcmVxdWVzdGVkIGNsYXNzOiAnLnVjZmlyc3QoJGxpYikKIAkJKTsKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02Niw3ICs2Myw3IEBACiAJCSR0aGlzLT5jaV92ZnNfY3JlYXRlKCRleHQsICc8P3BocCBjbGFzcyAnLiRleHQuJyBleHRlbmRzICcuJGNsYXNzLicgeyB9JywgJHRoaXMtPmNpX2FwcF9yb290LCAnbGlicmFyaWVzJyk7CiAKIAkJLy8gVGVzdCBsb2FkaW5nIHdpdGggZXh0ZW5zaW9uCi0JCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5sb2FkLT5saWJyYXJ5KCRsaWIpKTsKKwkJJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoJ0NJX0xvYWRlcicsICR0aGlzLT5sb2FkLT5saWJyYXJ5KCRsaWIpKTsKIAkJJHRoaXMtPmFzc2VydFRydWUoY2xhc3NfZXhpc3RzKCRjbGFzcyksICRjbGFzcy4nIGRvZXMgbm90IGV4aXN0Jyk7CiAJCSR0aGlzLT5hc3NlcnRUcnVlKGNsYXNzX2V4aXN0cygkZXh0KSwgJGV4dC4nIGRvZXMgbm90IGV4aXN0Jyk7CiAJCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRjbGFzcywgJG5hbWUsICR0aGlzLT5jaV9vYmopOwpAQCAtNzQsMTMgKzcxLDEzIEBACiAKIAkJLy8gVGVzdCByZWxvYWRpbmcgd2l0aCBvYmplY3QgbmFtZQogCQkkb2JqID0gJ2V4dHRlc3QnOwotCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+bG9hZC0+bGlicmFyeSgkbGliLCBOVUxMLCAkb2JqKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+bGlicmFyeSgkbGliLCBOVUxMLCAkb2JqKSk7CiAJCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRjbGFzcywgJG9iaiwgJHRoaXMtPmNpX29iaik7CiAJCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRleHQsICRvYmosICR0aGlzLT5jaV9vYmopOwogCiAJCS8vIFRlc3QgcmVsb2FkaW5nCiAJCXVuc2V0KCR0aGlzLT5jaV9vYmotPiRuYW1lKTsKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOwogCQkkdGhpcy0+YXNzZXJ0T2JqZWN0Tm90SGFzQXR0cmlidXRlKCRuYW1lLCAkdGhpcy0+Y2lfb2JqKTsKIAogCQkvLyBDcmVhdGUgYmFzZWxlc3MgbGlicmFyeQpAQCAtOTQsNyArOTEsNyBAQAogCQkJJ1J1bnRpbWVFeGNlcHRpb24nLAogCQkJJ0NJIEVycm9yOiBVbmFibGUgdG8gbG9hZCB0aGUgcmVxdWVzdGVkIGNsYXNzOiAnLiRsaWIKIAkJKTsKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTcsMTMgKzExNCwxMyBAQAogCiAJCS8vIFRlc3Qgb2JqZWN0IG5hbWUgYW5kIGNvbmZpZwogCQkkb2JqID0gJ3Rlc3R5JzsKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYiwgTlVMTCwgJG9iaikpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYiwgTlVMTCwgJG9iaikpOwogCQkkdGhpcy0+YXNzZXJ0VHJ1ZShjbGFzc19leGlzdHMoJGNsYXNzKSwgJGNsYXNzLicgZG9lcyBub3QgZXhpc3QnKTsKIAkJJHRoaXMtPmFzc2VydEF0dHJpYnV0ZUluc3RhbmNlT2YoJGNsYXNzLCAkb2JqLCAkdGhpcy0+Y2lfb2JqKTsKIAkJJHRoaXMtPmFzc2VydEVxdWFscygkY2ZnLCAkdGhpcy0+Y2lfb2JqLT4kb2JqLT5jb25maWcpOwogCiAJCS8vIFRlc3QgaXNfbG9hZGVkCi0JCSR0aGlzLT5hc3NlcnRFcXVhbHMoJG9iaiwgJHRoaXMtPmxvYWQtPmlzX2xvYWRlZCgkbGliKSk7CisJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJG9iaiwgJHRoaXMtPmxvYWQtPmlzX2xvYWRlZCh1Y2ZpcnN0KCRsaWIpKSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNiw3ICsxMzMsNyBAQAogCQkkdGhpcy0+Y2lfdmZzX2NyZWF0ZSh1Y2ZpcnN0KCRsaWIpLCAnPD9waHAgY2xhc3MgJy4kY2xhc3MuJyB7IH0nLCAkdGhpcy0+Y2lfYXBwX3Jvb3QsICdsaWJyYXJpZXMnKTsKIAogCQkvLyBMb2FkIGxpYnJhcnkKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOwogCiAJCS8vIFdhcyB0aGUgbW9kZWwgY2xhc3MgaW5zdGFudGlhdGVkLgogCQkkdGhpcy0+YXNzZXJ0VHJ1ZShjbGFzc19leGlzdHMoJGNsYXNzKSwgJGNsYXNzLicgZG9lcyBub3QgZXhpc3QnKTsKQEAgLTE1OCwyMCArMTU1LDE3IEBACiAJCSR0aGlzLT5jaV92ZnNfY3JlYXRlKHVjZmlyc3QoJGRyaXZlciksICRjb250ZW50LCAkdGhpcy0+Y2lfYmFzZV9yb290LCAnbGlicmFyaWVzLycuJGRpcik7CiAKIAkJLy8gVGVzdCBsb2FkaW5nIGFzIGFuIGFycmF5LgotCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+bG9hZC0+ZHJpdmVyKGFycmF5KCRkcml2ZXIpKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+ZHJpdmVyKGFycmF5KCRkcml2ZXIpKSk7CiAJCSR0aGlzLT5hc3NlcnRUcnVlKGNsYXNzX2V4aXN0cygkY2xhc3MpLCAkY2xhc3MuJyBkb2VzIG5vdCBleGlzdCcpOwogCQkkdGhpcy0+YXNzZXJ0QXR0cmlidXRlSW5zdGFuY2VPZigkY2xhc3MsICRkcml2ZXIsICR0aGlzLT5jaV9vYmopOwogCiAJCS8vIFRlc3QgbG9hZGluZyBhcyBhIGxpYnJhcnkgd2l0aCBhIG5hbWUKIAkJJG9iaiA9ICd0ZXN0ZHJpdmUnOwotCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+bG9hZC0+bGlicmFyeSgkZHJpdmVyLCBOVUxMLCAkb2JqKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+bGlicmFyeSgkZHJpdmVyLCBOVUxMLCAkb2JqKSk7CiAJCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRjbGFzcywgJG9iaiwgJHRoaXMtPmNpX29iaik7CiAKLQkJLy8gVGVzdCBubyBkcml2ZXIgZ2l2ZW4KLQkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5sb2FkLT5kcml2ZXIoKSk7Ci0KIAkJLy8gVGVzdCBhIHN0cmluZyBnaXZlbiB0byBwYXJhbXMKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmRyaXZlcigkZHJpdmVyLCAnICcpKTsKKwkJJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoJ0NJX0xvYWRlcicsICR0aGlzLT5sb2FkLT5kcml2ZXIoJGRyaXZlciwgJyAnKSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4MSwxOSArMTc1LDE5IEBACiAJCSR0aGlzLT5jaV9zZXRfY29yZV9jbGFzcygnbW9kZWwnLCAnQ0lfTW9kZWwnKTsKIAogCQkvLyBDcmVhdGUgbW9kZWwgaW4gVkZTCi0JCSRtb2RlbCA9ICd1bml0X3Rlc3RfbW9kZWwnOwotCQkkY2xhc3MgPSB1Y2ZpcnN0KCRtb2RlbCk7Ci0JCSRjb250ZW50ID0gJzw/cGhwIGNsYXNzICcuJGNsYXNzLicgZXh0ZW5kcyBDSV9Nb2RlbCB7fSAnOworCQkkbW9kZWwgPSAnVW5pdF90ZXN0X21vZGVsJzsKKwkJJGNvbnRlbnQgPSAnPD9waHAgY2xhc3MgJy4kbW9kZWwuJyBleHRlbmRzIENJX01vZGVsIHt9ICc7CiAJCSR0aGlzLT5jaV92ZnNfY3JlYXRlKCRtb2RlbCwgJGNvbnRlbnQsICR0aGlzLT5jaV9hcHBfcm9vdCwgJ21vZGVscycpOwogCiAJCS8vIExvYWQgbW9kZWwKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPm1vZGVsKCRtb2RlbCkpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPm1vZGVsKCRtb2RlbCkpOwogCiAJCS8vIFdhcyB0aGUgbW9kZWwgY2xhc3MgaW5zdGFudGlhdGVkLgotCQkkdGhpcy0+YXNzZXJ0VHJ1ZShjbGFzc19leGlzdHMoJGNsYXNzKSk7CisJCSR0aGlzLT5hc3NlcnRUcnVlKGNsYXNzX2V4aXN0cygkbW9kZWwpKTsKKwkJJHRoaXMtPmFzc2VydE9iamVjdEhhc0F0dHJpYnV0ZSgkbW9kZWwsICR0aGlzLT5jaV9vYmopOwogCiAJCS8vIFRlc3Qgbm8gbW9kZWwgZ2l2ZW4KLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPm1vZGVsKCcnKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+bW9kZWwoJycpKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjA0LDIyICsxOTgsMjEgQEAKIAkJJHRoaXMtPmNpX2NvcmVfY2xhc3MoJ21vZGVsJyk7CiAKIAkJLy8gQ3JlYXRlIG1vZGVsaW4gVkZTCi0JCSRtb2RlbCA9ICd0ZXN0X3N1Yl9tb2RlbCc7CisJCSRtb2RlbCA9ICdUZXN0X3N1Yl9tb2RlbCc7CiAJCSRiYXNlID0gJ0NJX01vZGVsJzsKLQkJJGNsYXNzID0gdWNmaXJzdCgkbW9kZWwpOwogCQkkc3ViZGlyID0gJ2NhcnMnOwotCQkkdGhpcy0+Y2lfdmZzX2NyZWF0ZSgkbW9kZWwsICc8P3BocCBjbGFzcyAnLiRjbGFzcy4nIGV4dGVuZHMgJy4kYmFzZS4nIHsgfScsICR0aGlzLT5jaV9hcHBfcm9vdCwKKwkJJHRoaXMtPmNpX3Zmc19jcmVhdGUoJG1vZGVsLCAnPD9waHAgY2xhc3MgJy4kbW9kZWwuJyBleHRlbmRzICcuJGJhc2UuJyB7IH0nLCAkdGhpcy0+Y2lfYXBwX3Jvb3QsCiAJCQlhcnJheSgnbW9kZWxzJywgJHN1YmRpcikpOwogCiAJCS8vIExvYWQgbW9kZWwKIAkJJG5hbWUgPSAndGVzdG9ycyc7Ci0JCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5sb2FkLT5tb2RlbCgkc3ViZGlyLicvJy4kbW9kZWwsICRuYW1lKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+bW9kZWwoJHN1YmRpci4nLycuJG1vZGVsLCAkbmFtZSkpOwogCiAJCS8vIFdhcyB0aGUgbW9kZWwgY2xhc3MgaW5zdGFudGlhdGVkPwotCQkkdGhpcy0+YXNzZXJ0VHJ1ZShjbGFzc19leGlzdHMoJGNsYXNzKSk7CisJCSR0aGlzLT5hc3NlcnRUcnVlKGNsYXNzX2V4aXN0cygkbW9kZWwpKTsKIAkJJHRoaXMtPmFzc2VydE9iamVjdEhhc0F0dHJpYnV0ZSgkbmFtZSwgJHRoaXMtPmNpX29iaik7CiAJCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRiYXNlLCAkbmFtZSwgJHRoaXMtPmNpX29iaik7Ci0JCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRjbGFzcywgJG5hbWUsICR0aGlzLT5jaV9vYmopOworCQkkdGhpcy0+YXNzZXJ0QXR0cmlidXRlSW5zdGFuY2VPZigkbW9kZWwsICRuYW1lLCAkdGhpcy0+Y2lfb2JqKTsKIAogCQkvLyBUZXN0IG5hbWUgY29uZmxpY3QKIAkJJG9iaiA9ICdjb25mbGljdCc7CkBAIC0yMzcsNyArMjMwLDcgQEAKIAl7CiAJCSR0aGlzLT5zZXRFeHBlY3RlZEV4Y2VwdGlvbigKIAkJCSdSdW50aW1lRXhjZXB0aW9uJywKLQkJCSdDSSBFcnJvcjogVW5hYmxlIHRvIGxvY2F0ZSB0aGUgbW9kZWwgeW91IGhhdmUgc3BlY2lmaWVkOiBjaV90ZXN0X25vbmV4aXN0ZW50X21vZGVsLnBocCcKKwkJCSdDSSBFcnJvcjogVW5hYmxlIHRvIGxvY2F0ZSB0aGUgbW9kZWwgeW91IGhhdmUgc3BlY2lmaWVkOiBDaV90ZXN0X25vbmV4aXN0ZW50X21vZGVsLnBocCcKIAkJKTsKIAogCQkkdGhpcy0+bG9hZC0+bW9kZWwoJ2NpX3Rlc3Rfbm9uZXhpc3RlbnRfbW9kZWwucGhwJyk7CkBAIC0yNDcsOCArMjQwLDggQEAKIAogCS8vIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RGF0YWJhc2UoKQogCS8vIHsKLQkvLyAJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmRhdGFiYXNlKCkpOwotCS8vIAkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+bG9hZC0+ZGJ1dGlsKCkpOworCS8vIAkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmRhdGFiYXNlKCkpOworCS8vIAkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmRidXRpbCgpKTsKIAkvLyB9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjcyLDcgKzI2NSw3IEBACiAJCSR0aGlzLT5jaV9pbnN0YW5jZV92YXIoJ291dHB1dCcsICRvdXRwdXQpOwogCiAJCS8vIFRlc3QgdmlldyBvdXRwdXQKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPnZpZXcoJHZpZXcsIGFycmF5KCR2YXIgPT4gJHZhbHVlKSkpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPnZpZXcoJHZpZXcsIGFycmF5KCR2YXIgPT4gJHZhbHVlKSkpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMTgsOCArMzExLDggQEAKIAkJJHZhbDEgPSAnYmFyJzsKIAkJJGtleTIgPSAnYm9vJzsKIAkJJHZhbDIgPSAnaG9vJzsKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPnZhcnMoYXJyYXkoJGtleTEgPT4gJHZhbDEpKSk7Ci0JCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5sb2FkLT52YXJzKCRrZXkyLCAkdmFsMikpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPnZhcnMoYXJyYXkoJGtleTEgPT4gJHZhbDEpKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+dmFycygka2V5MiwgJHZhbDIpKTsKIAkJJHRoaXMtPmFzc2VydEVxdWFscygkdmFsMSwgJHRoaXMtPmxvYWQtPmdldF92YXIoJGtleTEpKTsKIAkJJHRoaXMtPmFzc2VydEVxdWFscyhhcnJheSgka2V5MSA9PiAkdmFsMSwgJGtleTIgPT4gJHZhbDIpLCAkdGhpcy0+bG9hZC0+Z2V0X3ZhcnMoKSk7CiAJfQpAQCAtMzQwLDcgKzMzMyw3IEBACiAJCSR0aGlzLT5jaV92ZnNfY3JlYXRlKCR0aGlzLT5wcmVmaXguJGhlbHBlci4nX2hlbHBlcicsICRjb250ZW50LCAkdGhpcy0+Y2lfYXBwX3Jvb3QsICdoZWxwZXJzJyk7CiAKIAkJLy8gTG9hZCBoZWxwZXIKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmhlbHBlcigkaGVscGVyKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+aGVscGVyKCRoZWxwZXIpKTsKIAkJJHRoaXMtPmFzc2VydFRydWUoZnVuY3Rpb25fZXhpc3RzKCRmdW5jKSwgJGZ1bmMuJyBkb2VzIG5vdCBleGlzdCcpOwogCQkkdGhpcy0+YXNzZXJ0VHJ1ZShmdW5jdGlvbl9leGlzdHMoJGV4ZnVuYyksICRleGZ1bmMuJyBkb2VzIG5vdCBleGlzdCcpOwogCkBAIC0zODUsNyArMzc4LDcgQEAKIAkJJHRoaXMtPmNpX3Zmc19jcmVhdGUoJGZpbGVzLCBOVUxMLCAkdGhpcy0+Y2lfYmFzZV9yb290LCAnaGVscGVycycpOwogCiAJCS8vIExvYWQgaGVscGVycwotCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+bG9hZC0+aGVscGVycygkaGVscGVycykpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmhlbHBlcnMoJGhlbHBlcnMpKTsKIAogCQkvLyBWZXJpZnkgaGVscGVyIGV4aXN0ZW5jZQogCQlmb3JlYWNoICgkZnVuY3MgYXMgJGZ1bmMpIHsKQEAgLTQwMiw3ICszOTUsNyBAQAogCQkkbGFuZyA9ICR0aGlzLT5nZXRNb2NrKCdDSV9MYW5nJywgYXJyYXkoJ2xvYWQnKSk7CiAJCSRsYW5nLT5leHBlY3RzKCR0aGlzLT5vbmNlKCkpLT5tZXRob2QoJ2xvYWQnKS0+d2l0aCgkZmlsZSk7CiAJCSR0aGlzLT5jaV9pbnN0YW5jZV92YXIoJ2xhbmcnLCAkbGFuZyk7Ci0JCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5sb2FkLT5sYW5ndWFnZSgkZmlsZSkpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxhbmd1YWdlKCRmaWxlKSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQyMCwyNCArNDEzLDI0IEBACiAKIAkJLy8gQWRkIHBhdGggYW5kIHZlcmlmeQogCQkkcGF0aCA9IEFQUFBBVEguJGRpci4nLyc7Ci0JCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5sb2FkLT5hZGRfcGFja2FnZV9wYXRoKCRwYXRoKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+YWRkX3BhY2thZ2VfcGF0aCgkcGF0aCkpOwogCQkkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHBhdGgsICR0aGlzLT5sb2FkLT5nZXRfcGFja2FnZV9wYXRocyhUUlVFKSk7CiAKIAkJLy8gVGVzdCBzdWNjZXNzZnVsIGxvYWQKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJGxpYikpOwogCQkkdGhpcy0+YXNzZXJ0VHJ1ZShjbGFzc19leGlzdHMoJGNsYXNzKSwgJGNsYXNzLicgZG9lcyBub3QgZXhpc3QnKTsKIAogCQkvLyBBZGQgYW5vdGhlciBwYXRoCiAJCSRwYXRoMiA9IEFQUFBBVEguJ2Fub3RoZXIvJzsKLQkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPmxvYWQtPmFkZF9wYWNrYWdlX3BhdGgoJHBhdGgyKSk7CisJCSR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdDSV9Mb2FkZXInLCAkdGhpcy0+bG9hZC0+YWRkX3BhY2thZ2VfcGF0aCgkcGF0aDIpKTsKIAkJJHRoaXMtPmFzc2VydENvbnRhaW5zKCRwYXRoMiwgJHRoaXMtPmxvYWQtPmdldF9wYWNrYWdlX3BhdGhzKFRSVUUpKTsKIAogCQkvLyBSZW1vdmUgbGFzdCBwYXRoCi0JCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlzLT5sb2FkLT5yZW1vdmVfcGFja2FnZV9wYXRoKCkpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPnJlbW92ZV9wYWNrYWdlX3BhdGgoKSk7CiAJCSR0aGlzLT5hc3NlcnROb3RDb250YWlucygkcGF0aDIsICR0aGlzLT5sb2FkLT5nZXRfcGFja2FnZV9wYXRocyhUUlVFKSk7CiAKIAkJLy8gUmVtb3ZlIHBhdGggYW5kIHZlcmlmeSByZXN0b3JlZCBwYXRocwotCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+bG9hZC0+cmVtb3ZlX3BhY2thZ2VfcGF0aCgkcGF0aCkpOworCQkkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQ0lfTG9hZGVyJywgJHRoaXMtPmxvYWQtPnJlbW92ZV9wYWNrYWdlX3BhdGgoJHBhdGgpKTsKIAkJJHRoaXMtPmFzc2VydEVxdWFscygkcGF0aHMsICR0aGlzLT5sb2FkLT5nZXRfcGFja2FnZV9wYXRocyhUUlVFKSk7CiAKIAkJLy8gVGVzdCBmYWlsZWQgbG9hZCB3aXRob3V0IHBhdGgKQEAgLTQ4MSw5ICs0NzQsOCBAQAogCQkvLyBDcmVhdGUgbW9kZWwgaW4gVkZTIHBhY2thZ2UgcGF0aAogCQkkZGlyID0gJ3Rlc3RkaXInOwogCQkkcGF0aCA9IEFQUFBBVEguJGRpci4nLyc7Ci0JCSRtb2RlbCA9ICdhdXRvbW9kJzsKLQkJJG1vZF9jbGFzcyA9IHVjZmlyc3QoJG1vZGVsKTsKLQkJJHRoaXMtPmNpX3Zmc19jcmVhdGUoJG1vZGVsLCAnPD9waHAgY2xhc3MgJy4kbW9kX2NsYXNzLicgeyB9JywgJHRoaXMtPmNpX2FwcF9yb290LCBhcnJheSgkZGlyLCAnbW9kZWxzJykpOworCQkkbW9kZWwgPSAnQXV0b21vZCc7CisJCSR0aGlzLT5jaV92ZnNfY3JlYXRlKCRtb2RlbCwgJzw/cGhwIGNsYXNzICcuJG1vZGVsLicgeyB9JywgJHRoaXMtPmNpX2FwcF9yb290LCBhcnJheSgkZGlyLCAnbW9kZWxzJykpOwogCiAJCS8vIENyZWF0ZSBhdXRvbG9hZGVyIGNvbmZpZwogCQkkY2ZnID0gYXJyYXkoCkBAIC01MTMsOCArNTA1LDggQEAKIAkJJHRoaXMtPmFzc2VydEF0dHJpYnV0ZUluc3RhbmNlT2YoJGRydl9jbGFzcywgJGRydiwgJHRoaXMtPmNpX29iaik7CiAKIAkJLy8gVmVyaWZ5IG1vZGVsCi0JCSR0aGlzLT5hc3NlcnRUcnVlKGNsYXNzX2V4aXN0cygkbW9kX2NsYXNzKSwgJG1vZF9jbGFzcy4nIGRvZXMgbm90IGV4aXN0Jyk7Ci0JCSR0aGlzLT5hc3NlcnRBdHRyaWJ1dGVJbnN0YW5jZU9mKCRtb2RfY2xhc3MsICRtb2RlbCwgJHRoaXMtPmNpX29iaik7CisJCSR0aGlzLT5hc3NlcnRUcnVlKGNsYXNzX2V4aXN0cygkbW9kZWwpLCAkbW9kZWwuJyBkb2VzIG5vdCBleGlzdCcpOworCQkkdGhpcy0+YXNzZXJ0QXR0cmlidXRlSW5zdGFuY2VPZigkbW9kZWwsICRtb2RlbCwgJHRoaXMtPmNpX29iaik7CiAKIAkJLy8gVmVyaWZ5IGNvbmZpZyBjYWxscwogCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCRjZmdbJ2NvbmZpZyddLCAkdGhpcy0+Y2lfb2JqLT5jb25maWctPmxvYWRlZCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jb2RlaWduaXRlci9jb3JlL01vZGVsX3Rlc3QucGhwIGIvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9Nb2RlbF90ZXN0LnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGRjOTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9Nb2RlbF90ZXN0LnBocApAQCAtMCwwICsxLDM3IEBACis8P3BocAorCitjbGFzcyBNb2RlbF90ZXN0IGV4dGVuZHMgQ0lfVGVzdENhc2UgeworCisJcHJpdmF0ZSAkY2lfb2JqOworCisJcHVibGljIGZ1bmN0aW9uIHNldF91cCgpCisJeworCQkkbG9hZGVyID0gJHRoaXMtPmNpX2NvcmVfY2xhc3MoJ2xvYWRlcicpOworCQkkdGhpcy0+bG9hZCA9IG5ldyAkbG9hZGVyKCk7CisJCSR0aGlzLT5jaV9vYmogPSAkdGhpcy0+Y2lfaW5zdGFuY2UoKTsKKwkJJHRoaXMtPmNpX3NldF9jb3JlX2NsYXNzKCdtb2RlbCcsICdDSV9Nb2RlbCcpOworCisJCSRtb2RlbF9jb2RlID08PDxNT0RFTAorPD9waHAKK2NsYXNzIFRlc3RfbW9kZWwgZXh0ZW5kcyBDSV9Nb2RlbCB7CisKKwlwdWJsaWMgXCRwcm9wZXJ0eSA9ICdmb28nOworCit9CitNT0RFTDsKKworCQkkdGhpcy0+Y2lfdmZzX2NyZWF0ZSgnVGVzdF9tb2RlbCcsICRtb2RlbF9jb2RlLCAkdGhpcy0+Y2lfYXBwX3Jvb3QsICdtb2RlbHMnKTsKKwkJJHRoaXMtPmxvYWQtPm1vZGVsKCd0ZXN0X21vZGVsJyk7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXB1YmxpYyBmdW5jdGlvbiB0ZXN0X19nZXQoKQorCXsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnZm9vJywgJHRoaXMtPmNpX29iai0+dGVzdF9tb2RlbC0+cHJvcGVydHkpOworCisJCSR0aGlzLT5jaV9vYmotPmNvbnRyb2xsZXJfcHJvcGVydHkgPSAnYmFyJzsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnYmFyJywgJHRoaXMtPmNpX29iai0+dGVzdF9tb2RlbC0+Y29udHJvbGxlcl9wcm9wZXJ0eSk7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9TZWN1cml0eV90ZXN0LnBocCBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvU2VjdXJpdHlfdGVzdC5waHAKaW5kZXggM2Y2ZTNiMC4uNDMzYWQzMSAxMDA2NDQKLS0tIGEvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9TZWN1cml0eV90ZXN0LnBocAorKysgYi90ZXN0cy9jb2RlaWduaXRlci9jb3JlL1NlY3VyaXR5X3Rlc3QucGhwCkBAIC01LDcgKzUsNyBAQAogCXB1YmxpYyBmdW5jdGlvbiBzZXRfdXAoKQogCXsKIAkJLy8gU2V0IGNvb2tpZSBmb3Igc2VjdXJpdHkgdGVzdAotCQkkX0NPT0tJRVsnY2lfY3NyZl9jb29raWUnXSA9IG1kNSh1bmlxaWQocmFuZCgpLCBUUlVFKSk7CisJCSRfQ09PS0lFWydjaV9jc3JmX2Nvb2tpZSddID0gbWQ1KHVuaXFpZChtdF9yYW5kKCksIFRSVUUpKTsKIAogCQkvLyBTZXQgY29uZmlnIGZvciBTZWN1cml0eSBjbGFzcwogCQkkdGhpcy0+Y2lfc2V0X2NvbmZpZygnY3NyZl9wcm90ZWN0aW9uJywgVFJVRSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jb2RlaWduaXRlci9jb3JlL1VSSV90ZXN0LnBocCBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvVVJJX3Rlc3QucGhwCmluZGV4IDdmYTBlNjIuLjY1ODljMWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvVVJJX3Rlc3QucGhwCisrKyBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvVVJJX3Rlc3QucGhwCkBAIC0yNiw2ICsyNiwxMCBAQAogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorCS8qCisKKwkJVGhpcyBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY29uc3RydWN0b3IKKwogCXB1YmxpYyBmdW5jdGlvbiB0ZXN0X2ZldGNoX3VyaV9zdHJpbmcoKQogCXsKIAkJZGVmaW5lKCdTRUxGJywgJ2luZGV4LnBocCcpOwpAQCAtODYsOSArOTAsMTQgQEAKIAkJLy8gdXJpX3Byb3RvY29sOiBSRVFVRVNUX1VSSQogCQkvLyB1cmlfcHJvdG9jb2w6IENMSQogCX0KKwkqLwogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorCS8qCisKKwkJVGhpcyBoYXMgYmVlbiBtb3ZlZCBpbnRvIF9zZXRfdXJpX3N0cmluZygpCisKIAlwdWJsaWMgZnVuY3Rpb24gdGVzdF9leHBsb2RlX3NlZ21lbnRzKCkKIAl7CiAJCS8vIExldCdzIHRlc3QgdGhlIGZ1bmN0aW9uJ3MgYWJpbGl0eSB0byBjbGVhbiB1cCB0aGlzIG1lc3MKQEAgLTEwNywxNiArMTE2LDE1IEBACiAJCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCRhLCAkdGhpcy0+dXJpLT5zZWdtZW50cyk7CiAJCX0KIAl9Ci0KKwkqLwogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlwdWJsaWMgZnVuY3Rpb24gdGVzdF9maWx0ZXJfdXJpKCkKIAl7Ci0JCSR0aGlzLT51cmktPmNvbmZpZy0+c2V0X2l0ZW0oJ2VuYWJsZV9xdWVyeV9zdHJpbmdzJywgRkFMU0UpOwotCQkkdGhpcy0+dXJpLT5jb25maWctPnNldF9pdGVtKCdwZXJtaXR0ZWRfdXJpX2NoYXJzJywgJ2EteiAwLTl+JS46X1wtJyk7CisJCSR0aGlzLT51cmktPl9zZXRfcGVybWl0dGVkX3VyaV9jaGFycygnYS16IDAtOX4lLjpfXC0nKTsKIAogCQkkc3RyX2luID0gJ2FiYzAxMjM5fiUuOl8tJzsKLQkJJHN0ciA9ICR0aGlzLT51cmktPl9maWx0ZXJfdXJpKCRzdHJfaW4pOworCQkkc3RyID0gJHRoaXMtPnVyaS0+ZmlsdGVyX3VyaSgkc3RyX2luKTsKIAogCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCRzdHIsICRzdHJfaW4pOwogCX0KQEAgLTEyNiwxMSArMTM0LDkgQEAKIAlwdWJsaWMgZnVuY3Rpb24gdGVzdF9maWx0ZXJfdXJpX2VzY2FwaW5nKCkKIAl7CiAJCS8vIGVuc3VyZSBlc2NhcGluZyBldmVuIGlmIGRvZGdleSBjaGFyYWN0ZXJzIGFyZSBwZXJtaXR0ZWQKKwkJJHRoaXMtPnVyaS0+X3NldF9wZXJtaXR0ZWRfdXJpX2NoYXJzKCdhLXogMC05fiUuOl9cLSgpJCcpOwogCi0JCSR0aGlzLT51cmktPmNvbmZpZy0+c2V0X2l0ZW0oJ2VuYWJsZV9xdWVyeV9zdHJpbmdzJywgRkFMU0UpOwotCQkkdGhpcy0+dXJpLT5jb25maWctPnNldF9pdGVtKCdwZXJtaXR0ZWRfdXJpX2NoYXJzJywgJ2EteiAwLTl+JS46X1wtKCkkJyk7Ci0KLQkJJHN0ciA9ICR0aGlzLT51cmktPl9maWx0ZXJfdXJpKCckZGVzdHJveV9hcHAoZm9vKScpOworCQkkc3RyID0gJHRoaXMtPnVyaS0+ZmlsdGVyX3VyaSgnJGRlc3Ryb3lfYXBwKGZvbyknKTsKIAogCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCRzdHIsICcmIzM2O2Rlc3Ryb3lfYXBwJiM0MDtmb28mIzQxOycpOwogCX0KQEAgLTE0MiwyNSArMTQ4LDggQEAKIAkJJHRoaXMtPnNldEV4cGVjdGVkRXhjZXB0aW9uKCdSdW50aW1lRXhjZXB0aW9uJyk7CiAKIAkJJHRoaXMtPnVyaS0+Y29uZmlnLT5zZXRfaXRlbSgnZW5hYmxlX3F1ZXJ5X3N0cmluZ3MnLCBGQUxTRSk7Ci0JCSR0aGlzLT51cmktPmNvbmZpZy0+c2V0X2l0ZW0oJ3Blcm1pdHRlZF91cmlfY2hhcnMnLCAnYS16IDAtOX4lLjpfXC0nKTsKLQkJJHRoaXMtPnVyaS0+X2ZpbHRlcl91cmkoJyR0aGlzKCknKTsKLQl9Ci0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JcHVibGljIGZ1bmN0aW9uIHRlc3RfcmVtb3ZlX3VybF9zdWZmaXgoKQotCXsKLQkJJHRoaXMtPnVyaS0+Y29uZmlnLT5zZXRfaXRlbSgndXJsX3N1ZmZpeCcsICcuaHRtbCcpOwotCi0JCSR0aGlzLT51cmktPnVyaV9zdHJpbmcgPSAnY29udHJvbGxlci9tZXRob2QvaW5kZXguaHRtbCc7Ci0JCSR0aGlzLT51cmktPl9yZW1vdmVfdXJsX3N1ZmZpeCgpOwotCi0JCSR0aGlzLT5hc3NlcnRFcXVhbHMoJHRoaXMtPnVyaS0+dXJpX3N0cmluZywgJ2NvbnRyb2xsZXIvbWV0aG9kL2luZGV4Jyk7Ci0KLQkJJHRoaXMtPnVyaS0+dXJpX3N0cmluZyA9ICdjb250cm9sbGVyL21ldGhvZC9pbmRleC5odG1saWZ5Lmh0bWwnOwotCQkkdGhpcy0+dXJpLT5fcmVtb3ZlX3VybF9zdWZmaXgoKTsKLQotCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCR0aGlzLT51cmktPnVyaV9zdHJpbmcsICdjb250cm9sbGVyL21ldGhvZC9pbmRleC5odG1saWZ5Jyk7CisJCSR0aGlzLT51cmktPl9zZXRfcGVybWl0dGVkX3VyaV9jaGFycygnYS16IDAtOX4lLjpfXC0nKTsKKwkJJHRoaXMtPnVyaS0+ZmlsdGVyX3VyaSgnJHRoaXMoKScpOwogCX0KIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9jb2RlaWduaXRlci9jb3JlL1V0ZjhfdGVzdC5waHAgYi90ZXN0cy9jb2RlaWduaXRlci9jb3JlL1V0ZjhfdGVzdC5waHAKaW5kZXggY2FhN2I2OS4uNzEyOTkxMyAxMDA2NDQKLS0tIGEvdGVzdHMvY29kZWlnbml0ZXIvY29yZS9VdGY4X3Rlc3QucGhwCisrKyBiL3Rlc3RzL2NvZGVpZ25pdGVyL2NvcmUvVXRmOF90ZXN0LnBocApAQCAtMTEsMTAgKzExLDE1IEBACiAKIAlwdWJsaWMgZnVuY3Rpb24gdGVzdF9jb252ZXJ0X3RvX3V0ZjgoKQogCXsKLQkJJHRoaXMtPmFzc2VydEVxdWFscygKLQkJCSR0aGlzLT51dGY4LT5jb252ZXJ0X3RvX3V0ZjgoJ/Ll8fInLCAnV0lORE9XUy0xMjUxJyksCi0JCQkn0YLQtdGB0YInCi0JCSk7CisJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJ9GC0LXRgdGCJywgJHRoaXMtPnV0ZjgtPmNvbnZlcnRfdG9fdXRmOCgn8uXx8icsICdXSU5ET1dTLTEyNTEnKSk7CisJfQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXB1YmxpYyBmdW5jdGlvbiB0ZXN0X2lzX2FzY2lpKCkKKwl7CisJCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT51dGY4LT5pc19hc2NpaV90ZXN0KCdmb28gYmFyJykpOworCQkkdGhpcy0+YXNzZXJ0RmFsc2UoJHRoaXMtPnV0ZjgtPmlzX2FzY2lpX3Rlc3QoJ9GC0LXRgdGCJykpOwogCX0KIAogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvZGVpZ25pdGVyL2hlbHBlcnMvdGV4dF9oZWxwZXJfdGVzdC5waHAgYi90ZXN0cy9jb2RlaWduaXRlci9oZWxwZXJzL3RleHRfaGVscGVyX3Rlc3QucGhwCmluZGV4IGQ3NWQyNjIuLjdhN2RjMGEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvZGVpZ25pdGVyL2hlbHBlcnMvdGV4dF9oZWxwZXJfdGVzdC5waHAKKysrIGIvdGVzdHMvY29kZWlnbml0ZXIvaGVscGVycy90ZXh0X2hlbHBlcl90ZXN0LnBocApAQCAtMTA2LDE3ICsxMDYsMTkgQEAKIAlwdWJsaWMgZnVuY3Rpb24gdGVzdF9oaWdobGlnaHRfcGhyYXNlKCkKIAl7CiAJCSRzdHJzID0gYXJyYXkoCi0JCQkndGhpcyBpcyBhIHBocmFzZScJCQk9PiAnPHN0cm9uZz50aGlzIGlzPC9zdHJvbmc+IGEgcGhyYXNlJywKLQkJCSd0aGlzIGlzIGFub3RoZXInCQkJPT4gJzxzdHJvbmc+dGhpcyBpczwvc3Ryb25nPiBhbm90aGVyJywKLQkJCSdHaW1tZSBhIHRlc3QsIFNhbGx5JwkJPT4gJ0dpbW1lIGEgdGVzdCwgU2FsbHknLAotCQkJJ09yIHRlbGwgbWUgd2hhdCB0aGlzIGlzJwk9PiAnT3IgdGVsbCBtZSB3aGF0IDxzdHJvbmc+dGhpcyBpczwvc3Ryb25nPicsCi0JCQknJwkJCQkJCQk9PiAnJworCQkJJ3RoaXMgaXMgYSBwaHJhc2UnICAgICAgICAgID0+ICc8bWFyaz50aGlzIGlzPC9tYXJrPiBhIHBocmFzZScsCisJCQkndGhpcyBpcyBhbm90aGVyJyAgICAgICAgICAgPT4gJzxtYXJrPnRoaXMgaXM8L21hcms+IGFub3RoZXInLAorCQkJJ0dpbW1lIGEgdGVzdCwgU2FsbHknICAgICAgID0+ICdHaW1tZSBhIHRlc3QsIFNhbGx5JywKKwkJCSdPciB0ZWxsIG1lIHdoYXQgdGhpcyBpcycgICA9PiAnT3IgdGVsbCBtZSB3aGF0IDxtYXJrPnRoaXMgaXM8L21hcms+JywKKwkJCScnICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnJwogCQkpOwogCiAJCWZvcmVhY2ggKCRzdHJzIGFzICRzdHIgPT4gJGV4cGVjdCkKIAkJewogCQkJJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0LCBoaWdobGlnaHRfcGhyYXNlKCRzdHIsICd0aGlzIGlzJykpOwogCQl9CisKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnPHN0cm9uZz50aGlzIGlzPC9zdHJvbmc+IGEgc3Ryb25nIHRlc3QnLCBoaWdobGlnaHRfcGhyYXNlKCd0aGlzIGlzIGEgc3Ryb25nIHRlc3QnLCAndGhpcyBpcycsICc8c3Ryb25nPicsICc8L3N0cm9uZz4nKSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9jb2RlaWduaXRlci9saWJyYXJpZXMvQ2FsZW5kYXJfdGVzdC5waHAgYi90ZXN0cy9jb2RlaWduaXRlci9saWJyYXJpZXMvQ2FsZW5kYXJfdGVzdC5waHAKaW5kZXggOTUyZThhOC4uNzY4YmM4NSAxMDA2NDQKLS0tIGEvdGVzdHMvY29kZWlnbml0ZXIvbGlicmFyaWVzL0NhbGVuZGFyX3Rlc3QucGhwCisrKyBiL3Rlc3RzL2NvZGVpZ25pdGVyL2xpYnJhcmllcy9DYWxlbmRhcl90ZXN0LnBocApAQCAtMTY5LDMwICsxNjksMzMgQEAKIAkJJHRoaXMtPmFzc2VydEVxdWFscygzMSwgJHRoaXMtPmNhbGVuZGFyLT5nZXRfdG90YWxfZGF5cygxMiwgMjAxMikpOwogCX0KIAotCWZ1bmN0aW9uIHRlc3RfZGVmYXVsdF90ZW1wbGF0ZSgpCisJcHVibGljIGZ1bmN0aW9uIHRlc3RfZGVmYXVsdF90ZW1wbGF0ZSgpCiAJewogCQkkYXJyYXkgPSBhcnJheSgKLQkJCSd0YWJsZV9vcGVuJwkJCQk9PiAnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSIwIj4nLAotCQkJJ2hlYWRpbmdfcm93X3N0YXJ0JwkJCT0+ICc8dHI+JywKKwkJCSd0YWJsZV9vcGVuJwkJCT0+ICc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjAiPicsCisJCQknaGVhZGluZ19yb3dfc3RhcnQnCQk9PiAnPHRyPicsCiAJCQknaGVhZGluZ19wcmV2aW91c19jZWxsJwkJPT4gJzx0aD48YSBocmVmPSJ7cHJldmlvdXNfdXJsfSI+Jmx0OyZsdDs8L2E+PC90aD4nLAogCQkJJ2hlYWRpbmdfdGl0bGVfY2VsbCcJCT0+ICc8dGggY29sc3Bhbj0ie2NvbHNwYW59Ij57aGVhZGluZ308L3RoPicsCi0JCQknaGVhZGluZ19uZXh0X2NlbGwnCQkJPT4gJzx0aD48YSBocmVmPSJ7bmV4dF91cmx9Ij4mZ3Q7Jmd0OzwvYT48L3RoPicsCi0JCQknaGVhZGluZ19yb3dfZW5kJwkJCT0+ICc8L3RyPicsCi0JCQknd2Vla19yb3dfc3RhcnQnCQkJPT4gJzx0cj4nLAotCQkJJ3dlZWtfZGF5X2NlbGwnCQkJCT0+ICc8dGQ+e3dlZWtfZGF5fTwvdGQ+JywKLQkJCSd3ZWVrX3Jvd19lbmQnCQkJCT0+ICc8L3RyPicsCi0JCQknY2FsX3Jvd19zdGFydCcJCQkJPT4gJzx0cj4nLAotCQkJJ2NhbF9jZWxsX3N0YXJ0JwkJCT0+ICc8dGQ+JywKKwkJCSdoZWFkaW5nX25leHRfY2VsbCcJCT0+ICc8dGg+PGEgaHJlZj0ie25leHRfdXJsfSI+Jmd0OyZndDs8L2E+PC90aD4nLAorCQkJJ2hlYWRpbmdfcm93X2VuZCcJCT0+ICc8L3RyPicsCisJCQknd2Vla19yb3dfc3RhcnQnCQk9PiAnPHRyPicsCisJCQknd2Vla19kYXlfY2VsbCcJCQk9PiAnPHRkPnt3ZWVrX2RheX08L3RkPicsCisJCQknd2Vla19yb3dfZW5kJwkJCT0+ICc8L3RyPicsCisJCQknY2FsX3Jvd19zdGFydCcJCQk9PiAnPHRyPicsCisJCQknY2FsX2NlbGxfc3RhcnQnCQk9PiAnPHRkPicsCiAJCQknY2FsX2NlbGxfc3RhcnRfdG9kYXknCQk9PiAnPHRkPicsCi0JCQknY2FsX2NlbGxfY29udGVudCcJCQk9PiAnPGEgaHJlZj0ie2NvbnRlbnR9Ij57ZGF5fTwvYT4nLAorCQkJJ2NhbF9jZWxsX2NvbnRlbnQnCQk9PiAnPGEgaHJlZj0ie2NvbnRlbnR9Ij57ZGF5fTwvYT4nLAogCQkJJ2NhbF9jZWxsX2NvbnRlbnRfdG9kYXknCT0+ICc8YSBocmVmPSJ7Y29udGVudH0iPjxzdHJvbmc+e2RheX08L3N0cm9uZz48L2E+JywKIAkJCSdjYWxfY2VsbF9ub19jb250ZW50JwkJPT4gJ3tkYXl9JywKIAkJCSdjYWxfY2VsbF9ub19jb250ZW50X3RvZGF5Jwk9PiAnPHN0cm9uZz57ZGF5fTwvc3Ryb25nPicsCi0JCQknY2FsX2NlbGxfYmxhbmsnCQkJPT4gJyZuYnNwOycsCi0JCQknY2FsX2NlbGxfZW5kJwkJCQk9PiAnPC90ZD4nLAorCQkJJ2NhbF9jZWxsX2JsYW5rJwkJPT4gJyZuYnNwOycsCisJCQknY2FsX2NlbGxfZW5kJwkJCT0+ICc8L3RkPicsCiAJCQknY2FsX2NlbGxfZW5kX3RvZGF5JwkJPT4gJzwvdGQ+JywKLQkJCSdjYWxfcm93X2VuZCcJCQkJPT4gJzwvdHI+JywKLQkJCSd0YWJsZV9jbG9zZScJCQkJPT4gJzwvdGFibGU+JworCQkJJ2NhbF9yb3dfZW5kJwkJCT0+ICc8L3RyPicsCisJCQkndGFibGVfY2xvc2UnCQkJPT4gJzwvdGFibGU+JywKKwkJCSdjYWxfY2VsbF9zdGFydF9vdGhlcicJCT0+ICc8dGQgc3R5bGU9ImNvbG9yOiAjNjY2OyI+JywKKwkJCSdjYWxfY2VsbF9vdGhlcicJCT0+ICd7ZGF5fScsCisJCQknY2FsX2NlbGxfZW5kX290aGVyJwkJPT4gJzwvdGQ+JwogCQkpOwogCiAJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJGFycmF5LCAkdGhpcy0+Y2FsZW5kYXItPmRlZmF1bHRfdGVtcGxhdGUoKSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jb2RlaWduaXRlci9saWJyYXJpZXMvUGFyc2VyX3Rlc3QucGhwIGIvdGVzdHMvY29kZWlnbml0ZXIvbGlicmFyaWVzL1BhcnNlcl90ZXN0LnBocAppbmRleCAzOTRjMjI2Li4zNzU1Y2YxIDEwMDY0NAotLS0gYS90ZXN0cy9jb2RlaWduaXRlci9saWJyYXJpZXMvUGFyc2VyX3Rlc3QucGhwCisrKyBiL3Rlc3RzL2NvZGVpZ25pdGVyL2xpYnJhcmllcy9QYXJzZXJfdGVzdC5waHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlwdWJsaWMgZnVuY3Rpb24gdGVzdF9wYXJzZV9zaW1wbGVfc3RyaW5nKCkKKwlwdWJsaWMgZnVuY3Rpb24gdGVzdF9wYXJzZV9zdHJpbmcoKQogCXsKIAkJJGRhdGEgPSBhcnJheSgKIAkJCSd0aXRsZScgPT4gJ1BhZ2UgVGl0bGUnLApAQCAtNjksMTYgKzY5LDEyIEBACiAJewogCQkkZGF0YSA9IGFycmF5KAogCQkJJ3RpdGxlJwkJPT4gJ1N1cGVyIEhlcm9lcycsCi0JCQkncG93ZXJzJwk9PiBhcnJheSgKLQkJCQkJYXJyYXkoCi0JCQkJCQknaW52aXNpYmlsaXR5Jwk9PiAneWVzJywKLQkJCQkJCSdmbHlpbmcnCQk9PiAnbm8nKSwKLQkJCSkKKwkJCSdwb3dlcnMnCT0+IGFycmF5KGFycmF5KCdpbnZpc2liaWxpdHknID0+ICd5ZXMnLCAnZmx5aW5nJyA9PiAnbm8nKSkKIAkJKTsKIAotCQkkdGVtcGxhdGUgPSAie3RpdGxlfVxue3Bvd2Vyc317aW52aXNpYmlsaXR5fVxue2ZseWluZ317L3Bvd2Vyc30iOworCQkkdGVtcGxhdGUgPSAie3RpdGxlfVxue3Bvd2Vyc317aW52aXNpYmlsaXR5fVxue2ZseWluZ317L3Bvd2Vyc31cbnNlY29uZDp7cG93ZXJzfSB7aW52aXNpYmlsaXR5fSB7Zmx5aW5nfXsvcG93ZXJzfSI7CiAKLQkJJHRoaXMtPmFzc2VydEVxdWFscygiU3VwZXIgSGVyb2VzXG55ZXNcbm5vIiwgJHRoaXMtPnBhcnNlci0+cGFyc2Vfc3RyaW5nKCR0ZW1wbGF0ZSwgJGRhdGEsIFRSVUUpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygiU3VwZXIgSGVyb2VzXG55ZXNcbm5vXG5zZWNvbmQ6IHllcyBubyIsICR0aGlzLT5wYXJzZXItPnBhcnNlX3N0cmluZygkdGVtcGxhdGUsICRkYXRhLCBUUlVFKSk7CiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg3LDExICs4Myw3IEBACiAJewogCQkkZGF0YSA9IGFycmF5KAogCQkJJ3RpdGxlJwkJPT4gJ1N1cGVyIEhlcm9lcycsCi0JCQkncG93ZXJzJwk9PiBhcnJheSgKLQkJCQkJYXJyYXkoCi0JCQkJCQknaW52aXNpYmlsaXR5Jwk9PiAneWVzJywKLQkJCQkJCSdmbHlpbmcnCQk9PiAnbm8nKSwKLQkJCSkKKwkJCSdwb3dlcnMnCT0+IGFycmF5KGFycmF5KCdpbnZpc2liaWxpdHknID0+ICd5ZXMnLCAnZmx5aW5nJyA9PiAnbm8nKSkKIAkJKTsKIAogCQkkdGVtcGxhdGUgPSAie3RpdGxlfVxue3Bvd2Vyc317aW52aXNpYmlsaXR5fVxue2ZseWluZ30iOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY29kZWlnbml0ZXIvbGlicmFyaWVzL1VzZXJhZ2VudF90ZXN0LnBocCBiL3Rlc3RzL2NvZGVpZ25pdGVyL2xpYnJhcmllcy9Vc2VyYWdlbnRfdGVzdC5waHAKaW5kZXggZTM3MjY1NS4uYWVkMzhiOCAxMDA2NDQKLS0tIGEvdGVzdHMvY29kZWlnbml0ZXIvbGlicmFyaWVzL1VzZXJhZ2VudF90ZXN0LnBocAorKysgYi90ZXN0cy9jb2RlaWduaXRlci9saWJyYXJpZXMvVXNlcmFnZW50X3Rlc3QucGhwCkBAIC0xMSw5ICsxMSw3IEBACiAJCSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA9ICR0aGlzLT5fdXNlcl9hZ2VudDsKIAogCQkkdGhpcy0+Y2lfdmZzX2Nsb25lKCdhcHBsaWNhdGlvbi9jb25maWcvdXNlcl9hZ2VudHMucGhwJyk7Ci0KIAkJJHRoaXMtPmFnZW50ID0gbmV3IE1vY2tfTGlicmFyaWVzX1VzZXJBZ2VudCgpOwotCiAJCSR0aGlzLT5jaV9pbnN0YW5jZV92YXIoJ2FnZW50JywgJHRoaXMtPmFnZW50KTsKIAl9CiAKQEAgLTQwLDEyICszOCwyNyBAQAogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCXB1YmxpYyBmdW5jdGlvbiB0ZXN0X3V0aWxfaXNfZnVuY3Rpb25zKCkKKwlwdWJsaWMgZnVuY3Rpb24gdGVzdF9pc19mdW5jdGlvbnMoKQogCXsKIAkJJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPmFnZW50LT5pc19icm93c2VyKCkpOworCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+YWdlbnQtPmlzX2Jyb3dzZXIoJ1NhZmFyaScpKTsKKwkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5hZ2VudC0+aXNfYnJvd3NlcignRmlyZWZveCcpKTsKIAkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5hZ2VudC0+aXNfcm9ib3QoKSk7CiAJCSR0aGlzLT5hc3NlcnRGYWxzZSgkdGhpcy0+YWdlbnQtPmlzX21vYmlsZSgpKTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJcHVibGljIGZ1bmN0aW9uIHRlc3RfcmVmZXJyZXIoKQorCXsKKwkJJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddID0gJ2h0dHA6Ly9jb2RlaWduaXRlci5jb20vdXNlcl9ndWlkZS8nOworCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+YWdlbnQtPmlzX3JlZmVycmFsKCkpOworCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCdodHRwOi8vY29kZWlnbml0ZXIuY29tL3VzZXJfZ3VpZGUvJywgJHRoaXMtPmFnZW50LT5yZWZlcnJlcigpKTsKKworCQkkdGhpcy0+YWdlbnQtPnJlZmVyZXIgPSBOVUxMOworCQl1bnNldCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pOwogCQkkdGhpcy0+YXNzZXJ0RmFsc2UoJHRoaXMtPmFnZW50LT5pc19yZWZlcnJhbCgpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnJywgJHRoaXMtPmFnZW50LT5yZWZlcnJlcigpKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjMsNyArNzYsNiBAQAogCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCdTYWZhcmknLCAkdGhpcy0+YWdlbnQtPmJyb3dzZXIoKSk7CiAJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJzUzMy4yMC4yNycsICR0aGlzLT5hZ2VudC0+dmVyc2lvbigpKTsKIAkJJHRoaXMtPmFzc2VydEVxdWFscygnJywgJHRoaXMtPmFnZW50LT5yb2JvdCgpKTsKLQkJJHRoaXMtPmFzc2VydEVxdWFscygnJywgJHRoaXMtPmFnZW50LT5yZWZlcnJlcigpKTsKIAl9CiAKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzEsMTQgKzgzLDQzIEBACiAJcHVibGljIGZ1bmN0aW9uIHRlc3RfY2hhcnNldHMoKQogCXsKIAkJJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0NIQVJTRVQnXSA9ICd1dGY4JzsKKwkJJHRoaXMtPmFnZW50LT5jaGFyc2V0cyA9IGFycmF5KCk7CisJCSR0aGlzLT5hZ2VudC0+Y2hhcnNldHMoKTsKKwkJJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPmFnZW50LT5hY2NlcHRfY2hhcnNldCgndXRmOCcpKTsKKwkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5hZ2VudC0+YWNjZXB0X2NoYXJzZXQoJ2ZvbycpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygndXRmOCcsICR0aGlzLT5hZ2VudC0+Y2hhcnNldHNbMF0pOwogCi0JCSRjaGFyc2V0cyA9ICR0aGlzLT5hZ2VudC0+Y2hhcnNldHMoKTsKKwkJJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0NIQVJTRVQnXSA9ICcnOworCQkkdGhpcy0+YWdlbnQtPmNoYXJzZXRzID0gYXJyYXkoKTsKKwkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5hZ2VudC0+YWNjZXB0X2NoYXJzZXQoKSk7CisJCSR0aGlzLT5hc3NlcnRFcXVhbHMoJ1VuZGVmaW5lZCcsICR0aGlzLT5hZ2VudC0+Y2hhcnNldHNbMF0pOwogCi0JCSR0aGlzLT5hc3NlcnRFcXVhbHMoJ3V0ZjgnLCAkY2hhcnNldHNbMF0pOworCQkkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfQ0hBUlNFVCddID0gJ2lzby04ODU5LTUsIHVuaWNvZGUtMS0xOyBxPTAuOCc7CisJCSR0aGlzLT5hZ2VudC0+Y2hhcnNldHMgPSBhcnJheSgpOworCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+YWdlbnQtPmFjY2VwdF9jaGFyc2V0KCdpc28tODg1OS01JykpOworCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+YWdlbnQtPmFjY2VwdF9jaGFyc2V0KCd1bmljb2RlLTEtMScpKTsKKwkJJHRoaXMtPmFzc2VydEZhbHNlKCR0aGlzLT5hZ2VudC0+YWNjZXB0X2NoYXJzZXQoJ2ZvbycpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnaXNvLTg4NTktNScsICR0aGlzLT5hZ2VudC0+Y2hhcnNldHNbMF0pOworCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCd1bmljb2RlLTEtMScsICR0aGlzLT5hZ2VudC0+Y2hhcnNldHNbMV0pOwogCiAJCXVuc2V0KCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9DSEFSU0VUJ10pOworCX0KIAotCQkkdGhpcy0+YXNzZXJ0RmFsc2UoJHRoaXMtPmFnZW50LT5hY2NlcHRfY2hhcnNldCgpKTsKKwlwdWJsaWMgZnVuY3Rpb24gdGVzdF9wYXJzZSgpCisJeworCQkkbmV3X2FnZW50ID0gJ01vemlsbGEvNS4wIChBbmRyb2lkOyBNb2JpbGU7IHJ2OjEzLjApIEdlY2tvLzEzLjAgRmlyZWZveC8xMy4wJzsKKwkJJHRoaXMtPmFnZW50LT5wYXJzZSgkbmV3X2FnZW50KTsKKworCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCdBbmRyb2lkJywgJHRoaXMtPmFnZW50LT5wbGF0Zm9ybSgpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnRmlyZWZveCcsICR0aGlzLT5hZ2VudC0+YnJvd3NlcigpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnMTMuMCcsICR0aGlzLT5hZ2VudC0+dmVyc2lvbigpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnJywgJHRoaXMtPmFnZW50LT5yb2JvdCgpKTsKKwkJJHRoaXMtPmFzc2VydEVxdWFscygnQW5kcm9pZCcsICR0aGlzLT5hZ2VudC0+bW9iaWxlKCkpOworCQkkdGhpcy0+YXNzZXJ0RXF1YWxzKCRuZXdfYWdlbnQsICR0aGlzLT5hZ2VudC0+YWdlbnRfc3RyaW5nKCkpOworCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+YWdlbnQtPmlzX2Jyb3dzZXIoKSk7CisJCSR0aGlzLT5hc3NlcnRGYWxzZSgkdGhpcy0+YWdlbnQtPmlzX3JvYm90KCkpOworCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+YWdlbnQtPmlzX21vYmlsZSgpKTsKKwkJJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPmFnZW50LT5pc19tb2JpbGUoJ2FuZHJvaWQnKSk7CiAJfQogCiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvbW9ja3MvYXV0b2xvYWRlci5waHAgYi90ZXN0cy9tb2Nrcy9hdXRvbG9hZGVyLnBocAppbmRleCAzZDIxNmRhLi5jYzBhMmUyIDEwMDY0NAotLS0gYS90ZXN0cy9tb2Nrcy9hdXRvbG9hZGVyLnBocAorKysgYi90ZXN0cy9tb2Nrcy9hdXRvbG9hZGVyLnBocApAQCAtODksMjEgKzg5LDcgQEAKIAogCWlmICggISBmaWxlX2V4aXN0cygkZmlsZSkpCiAJewotCQkkdHJhY2UgPSBkZWJ1Z19iYWNrdHJhY2UoKTsKLQotCQlpZiAoJHRyYWNlWzJdWydmdW5jdGlvbiddID09PSAnY2xhc3NfZXhpc3RzJyBPUiAkdHJhY2VbMl1bJ2Z1bmN0aW9uJ10gPT09ICdmaWxlX2V4aXN0cycpCi0JCXsKLQkJCS8vIElmIHRoZSBhdXRvbG9hZCBjYWxsIGNhbWUgZnJvbSBgY2xhc3NfZXhpc3RzYCBvciBgZmlsZV9leGlzdHNgLAotCQkJLy8gd2Ugc2tpcHBlZCBhbmQgcmV0dXJuIEZBTFNFCi0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJZWxzZWlmICgoJGF1dG9sb2FkZXIgPSBzcGxfYXV0b2xvYWRfZnVuY3Rpb25zKCkpICYmIGVuZCgkYXV0b2xvYWRlcikgIT09IF9fRlVOQ1RJT05fXykKLQkJewotCQkJLy8gSWYgdGhlcmUgd2FzIG90aGVyIGN1c3RvbSBhdXRvbG9hZGVyLCBwYXNzZWQgYXdheQotCQkJcmV0dXJuIEZBTFNFOwotCQl9Ci0KLQkJdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiVW5hYmxlIHRvIGxvYWQgeyRjbGFzc30uIik7CisgICAgcmV0dXJuIEZBTFNFOwogCX0KIAogCWluY2x1ZGVfb25jZSgkZmlsZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9tb2Nrcy9jb3JlL2NvbW1vbi5waHAgYi90ZXN0cy9tb2Nrcy9jb3JlL2NvbW1vbi5waHAKaW5kZXggMGNjZmUxZS4uYjA3M2YyMyAxMDA2NDQKLS0tIGEvdGVzdHMvbW9ja3MvY29yZS9jb21tb24ucGhwCisrKyBiL3Rlc3RzL21vY2tzL2NvcmUvY29tbW9uLnBocApAQCAtMTc4LDcgKzE3OCw3IEBACiAKIGlmICggISBmdW5jdGlvbl9leGlzdHMoJ2xvZ19tZXNzYWdlJykpCiB7Ci0JZnVuY3Rpb24gbG9nX21lc3NhZ2UoJGxldmVsLCAkbWVzc2FnZSwgJHBocF9lcnJvciA9IEZBTFNFKQorCWZ1bmN0aW9uIGxvZ19tZXNzYWdlKCRsZXZlbCwgJG1lc3NhZ2UpCiAJewogCQlyZXR1cm4gVFJVRTsKIAl9CkBAIC0xOTAsNCArMTkwLDEzIEBACiAJewogCQlyZXR1cm4gVFJVRTsKIAl9Cit9CisKK2lmICggISBmdW5jdGlvbl9leGlzdHMoJ2lzX2NsaScpKQoreworCS8vIEluIG9yZGVyIHRvIHRlc3QgSFRUUCBmdW5jdGlvbmFsaXR5LCB3ZSBuZWVkIHRvIGxpZSBhYm91dCB0aGlzCisJZnVuY3Rpb24gaXNfY2xpKCkKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvbW9ja3MvY29yZS91cmkucGhwIGIvdGVzdHMvbW9ja3MvY29yZS91cmkucGhwCmluZGV4IDk0Zjc1ZGYuLjk2ZWM1YWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21vY2tzL2NvcmUvdXJpLnBocAorKysgYi90ZXN0cy9tb2Nrcy9jb3JlL3VyaS5waHAKQEAgLTEwLDE3ICsxMCwyMyBAQAogCQkvLyBzZXQgcHJlZGljdGFibGUgY29uZmlnIHZhbHVlcwogCQkkdGVzdC0+Y2lfc2V0X2NvbmZpZyhhcnJheSgKIAkJCSdpbmRleF9wYWdlJwkJPT4gJ2luZGV4LnBocCcsCi0JCQknYmFzZV91cmwnCQkJPT4gJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLAotCQkJJ3N1YmNsYXNzX3ByZWZpeCcJPT4gJ01ZXycKKwkJCSdiYXNlX3VybCcJCT0+ICdodHRwOi8vZXhhbXBsZS5jb20vJywKKwkJCSdzdWJjbGFzc19wcmVmaXgnCT0+ICdNWV8nLAorCQkJJ2VuYWJsZV9xdWVyeV9zdHJpbmdzJwk9PiBGQUxTRSwKKwkJCSdwZXJtaXR0ZWRfdXJpX2NoYXJzJwk9PiAnYS16IDAtOX4lLjpfXC0nCiAJCSkpOwogCiAJCSR0aGlzLT5jb25maWcgPSBuZXcgJGNsczsKIAorCQlpZiAoJHRoaXMtPmNvbmZpZy0+aXRlbSgnZW5hYmxlX3F1ZXJ5X3N0cmluZ3MnKSAhPT0gVFJVRSBPUiBpc19jbGkoKSkKKwkJeworCQkJJHRoaXMtPl9wZXJtaXR0ZWRfdXJpX2NoYXJzID0gJHRoaXMtPmNvbmZpZy0+aXRlbSgncGVybWl0dGVkX3VyaV9jaGFycycpOworCQl9CiAJfQogCi0JcHJvdGVjdGVkIGZ1bmN0aW9uIF9pc19jbGlfcmVxdWVzdCgpCisJcHVibGljIGZ1bmN0aW9uIF9zZXRfcGVybWl0dGVkX3VyaV9jaGFycygkdmFsdWUpCiAJewotCQlyZXR1cm4gRkFMU0U7CisJCSR0aGlzLT5fcGVybWl0dGVkX3VyaV9jaGFycyA9ICR2YWx1ZTsKIAl9CiAKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9tb2Nrcy9jb3JlL3V0ZjgucGhwIGIvdGVzdHMvbW9ja3MvY29yZS91dGY4LnBocAppbmRleCAwNjhlNzRhLi5hNDMxMzhmIDEwMDY0NAotLS0gYS90ZXN0cy9tb2Nrcy9jb3JlL3V0ZjgucGhwCisrKyBiL3Rlc3RzL21vY2tzL2NvcmUvdXRmOC5waHAKQEAgLTIzLDQgKzIzLDkgQEAKIAkJfQogCX0KIAorCXB1YmxpYyBmdW5jdGlvbiBpc19hc2NpaV90ZXN0KCRzdHIpCisJeworCQlyZXR1cm4gJHRoaXMtPl9pc19hc2NpaSgkc3RyKTsKKwl9CisKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvX3RoZW1lcy9lbGRvY3Mvc3RhdGljL2Fzc2V0L2Nzcy9jb21tb24uY3NzIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL190aGVtZXMvZWxkb2NzL3N0YXRpYy9hc3NldC9jc3MvY29tbW9uLmNzcwppbmRleCBkNWIwZTIxLi45NjIzODBiIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvX3RoZW1lcy9lbGRvY3Mvc3RhdGljL2Fzc2V0L2Nzcy9jb21tb24uY3NzCisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9fdGhlbWVzL2VsZG9jcy9zdGF0aWMvYXNzZXQvY3NzL2NvbW1vbi5jc3MKQEAgLTE0Myw3ICsxNDMsNyBAQAogYTpob3ZlciwKIGE6YWN0aXZleyBjb2xvcjogIzc0MkNBQzsgfQogCi1hLmhlYWRlcmxpbmt7IHZpc2liaWxpdHk6IGhpZGRlbjsgfQorYS5oZWFkZXJsaW5reyB2aXNpYmlsaXR5OiBoaWRkZW47IG1hcmdpbi1sZWZ0OiAwLjRlbTsgfQogCiAJOmhvdmVyID4gYS5oZWFkZXJsaW5rIHsgdmlzaWJpbGl0eTogdmlzaWJsZTsgfQogCkBAIC0yNzcsNyArMjc3LDcgQEAKIAkJYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsKIAkJYm9yZGVyOiAxcHggc29saWQ7CiAJCWJvcmRlci1jb2xvcjogIzAzMzg2MSAjMTM1OThGICMxMzU5OEYgIzAzMzg2MTsKLQkJZm9udC1zaXplOiBpbmhlcml0OworCQlmb250OiBpbmhlcml0OwogCQltYXJnaW4tcmlnaHQ6IDVweDsKIAkJcGFkZGluZzogNXB4OwogCQl3aWR0aDogMTc1cHg7CkBAIC0yOTAsOCArMjkwLDkgQEAKIAkJYm9yZGVyOiAxcHggc29saWQgIzAzMzg2MTsKIAkJY29sb3I6ICMwOTQ3NzY7CiAJCWN1cnNvcjogcG9pbnRlcjsKKwkJZm9udDogaW5oZXJpdDsKIAkJZm9udC13ZWlnaHQ6IGJvbGQ7Ci0JCXBhZGRpbmc6IDVweCAxMHB4IDRweDsKKwkJcGFkZGluZzogNXB4IDEwcHg7CiAJCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAJfQogCkBAIC0zNjAsNiArMzYxLDQgQEAKIAloMyxoNCxoNSxoNnsgZm9udC1zaXplOiAxNHB4OyB9CiB9CiAKLUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7Ci0JI2hlYWRlciBpbnB1dFt0eXBlPSJzdWJtaXQiXXsgcGFkZGluZy1ib3R0b206IDdweDsgfQotfQorI2hlYWRlciBpbnB1dFt0eXBlPSJzdWJtaXQiXSwgeDotbW96LWFueS1saW5reyBwYWRkaW5nOiA0cHggMTBweDsgfQpkaWZmIC0tZ2l0IGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2NoYW5nZWxvZy5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvY2hhbmdlbG9nLnJzdAppbmRleCBiYTk4MGQ4Li5jZDE5OThiIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvY2hhbmdlbG9nLnJzdAorKysgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvY2hhbmdlbG9nLnJzdApAQCAtMTksMTAgKzE5LDEyIEBACiAtICBHZW5lcmFsIENoYW5nZXMKIAogICAgLSAgUEhQIDUuMS42IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIENvZGVJZ25pdGVyIG5vdyByZXF1aXJlcyBQSFAgNS4yLjQuCisgICAtICBDaGFuZ2VkIGZpbGVuYW1pbmcgY29udmVudGlvbiAoY2xhc3MgZmlsZSBuYW1lcyBub3cgbXVzdCBiZSBVY2ZpcnN0IGFuZCBldmVyeXRoaW5nIGVsc2UgaW4gbG93ZXJjYXNlKS4KKyAgIC0gIENoYW5nZWQgdGhlIGRlZmF1bHQgZGF0YWJhc2UgZHJpdmVyIHRvICdteXNxbGknICh0aGUgb2xkICdteXNxbCcgZHJpdmVyIGlzIERFUFJFQ0FURUQpLgogICAgLSAgYGAkX1NFUlZFUlsnQ0lfRU5WJ11gYCBjYW4gbm93IGJlIHNldCB0byBjb250cm9sIHRoZSBgYEVOVklST05NRU5UYGAgY29uc3RhbnQuCiAgICAtICBBZGRlZCBhbiBvcHRpb25hbCBiYWNrdHJhY2UgdG8gcGhwLWVycm9yIHRlbXBsYXRlLgogICAgLSAgQWRkZWQgQW5kcm9pZCB0byB0aGUgbGlzdCBvZiB1c2VyIGFnZW50cy4KLSAgIC0gIEFkZGVkIFdpbmRvd3MgNywgV2luZG93cyA4LCBBbmRyb2lkLCBCbGFja2JlcnJ5LCBpT1MgYW5kIFBsYXlTdGF0aW9uIDMgdG8gdGhlIGxpc3Qgb2YgdXNlciBwbGF0Zm9ybXMuCisgICAtICBBZGRlZCBXaW5kb3dzIDcsIFdpbmRvd3MgOCwgV2luZG93cyA4LjEsIEFuZHJvaWQsIEJsYWNrYmVycnksIGlPUyBhbmQgUGxheVN0YXRpb24gMyB0byB0aGUgbGlzdCBvZiB1c2VyIHBsYXRmb3Jtcy4KICAgIC0gIEFkZGVkIEZlbm5lYyAoRmlyZWZveCBmb3IgbW9iaWxlKSB0byB0aGUgbGlzdCBvZiBtb2JpbGUgdXNlciBhZ2VudHMuCiAgICAtICBBYmlsaXR5IHRvIGxvZyBjZXJ0YWluIGVycm9yIHR5cGVzLCBub3QgYWxsIHVuZGVyIGEgdGhyZXNob2xkLgogICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgcGVtLCBwMTAsIHAxMiwgcDdhLCBwN2MsIHA3bSwgcDdyLCBwN3MsIGNydCwgY3JsLCBkZXIsIGtkYiwgcnNhLCBjZXIsIHNzdCwgY3NyIENlcnRzIHRvIG1pbWVzLnBocC4KQEAgLTU0LDggKzU2LDEwIEBACiAgICAtICBDaGFuZ2VkIGVudmlyb25tZW50IGRlZmF1bHRzIHRvIHJlcG9ydCBhbGwgZXJyb3JzIGluICpkZXZlbG9wbWVudCogYW5kIG9ubHkgZmF0YWwgb25lcyBpbiAqdGVzdGluZyosICpwcm9kdWN0aW9uKiBidXQgb25seSBkaXNwbGF5IHRoZW0gaW4gKmRldmVsb3BtZW50Ki4KICAgIC0gIFVwZGF0ZWQgKmlwX2FkZHJlc3MqIGRhdGFiYXNlIGZpZWxkIGxlbmd0aHMgZnJvbSAxNiB0byA0NSBmb3Igc3VwcG9ydGluZyBJUHY2IGFkZHJlc3Mgb24gOmRvYzpgVHJhY2tiYWNrIExpYnJhcnkgPGxpYnJhcmllcy90cmFja2JhY2s+YCBhbmQgOmRvYzpgQ2FwdGNoYSBIZWxwZXIgPGhlbHBlcnMvY2FwdGNoYV9oZWxwZXI+YC4KICAgIC0gIFJlbW92ZWQgKmNoZWF0c2hlZXRzKiBhbmQgKnF1aWNrX3JlZmVyZW5jZSogUERGcyBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgorICAgLSAgQWRkZWQgc3VwcG9ydCBub24tSFRNTCBlcnJvciB0ZW1wbGF0ZXMgZm9yIENMSSBhcHBsaWNhdGlvbnMuCiAgICAtICBBZGRlZCBhdmFpbGFiaWxpdHkgY2hlY2tzIHdoZXJlIHVzYWdlIG9mIGRhbmdlcm91cyBmdW5jdGlvbnMgbGlrZSBgYGV2YWwoKWBgIGFuZCBgYGV4ZWMoKWBgIGlzIHJlcXVpcmVkLgogICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgY2hhbmdpbmcgdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIGxvZyBmaWxlcyB1c2luZyBgYCRjb25maWdbJ2xvZ19maWxlX2V4dGVuc2lvbiddYGAuCisgICAtICBBZGRlZCBzdXBwb3J0IGZvciB0dXJuaW5nIG5ld2xpbmUgc3RhbmRhcmRpemF0aW9uIG9uL29mZiB2aWEgYGAkY29uZmlnWydzdGFuZGFyZGl6ZV9uZXdsaW5lcyddYGAuCiAKIC0gIEhlbHBlcnMKIApAQCAtNzMsMTAgKzc3LDkgQEAKICAgICAgIC0gOmZ1bmM6YHVybF90aXRsZSgpYCB3aWxsIG5vdyB0cmltIGV4dHJhIGRhc2hlcyBmcm9tIGJlZ2lubmluZyBhbmQgZW5kLgogICAgICAgLSA6ZnVuYzpgYW5jaG9yX3BvcHVwKClgIHdpbGwgbm93IGZpbGwgdGhlICpocmVmKiBhdHRyaWJ1dGUgd2l0aCB0aGUgVVJMIGFuZCBpdHMgSlMgY29kZSB3aWxsIHJldHVybiBGQUxTRSBpbnN0ZWFkLgogICAgICAgLSBBZGRlZCBKUyB3aW5kb3cgbmFtZSBzdXBwb3J0IHRvIHRoZSA6ZnVuYzpgYW5jaG9yX3BvcHVwKClgIGZ1bmN0aW9uLgotICAgICAgLSBBZGRlZCBzdXBwb3J0IChhdXRvLWRldGVjdGlvbikgZm9yIEhUVFAvMS4xIHJlc3BvbnNlIGNvZGUgMzAzIGluIDpmdW5jOmByZWRpcmVjdCgpYC4KKyAgICAgIC0gQWRkZWQgc3VwcG9ydCAoYXV0by1kZXRlY3Rpb24pIGZvciBIVFRQLzEuMSByZXNwb25zZSBjb2RlcyAzMDMsIDMwNyBpbiA6ZnVuYzpgcmVkaXJlY3QoKWAuCiAgICAgICAtIENoYW5nZWQgOmZ1bmM6YHJlZGlyZWN0KClgIHRvIGNob29zZSB0aGUgKipyZWZyZXNoKiogbWV0aG9kIG9ubHkgb24gSUlTIHNlcnZlcnMsIGluc3RlYWQgb2YgYWxsIHNlcnZlcnMgb24gV2luZG93cyAod2hlbiAqKmF1dG8qKiBpcyB1c2VkKS4KICAgICAgIC0gQ2hhbmdlZCA6ZnVuYzpgYW5jaG9yKClgLCA6ZnVuYzpgYW5jaG9yX3BvcHVwKClgLCBhbmQgOmZ1bmM6YHJlZGlyZWN0KClgIHRvIHN1cHBvcnQgcHJvdG9jb2wtcmVsYXRpdmUgVVJMcyAoZS5nLiAqLy9lbGxpc2xhYi5jb20vY29kZWlnbml0ZXIqKS4KLSAgICAgIC0gQWRkZWQgYW4gb3B0aW9uYWwgc2Vjb25kIHBhcmFtZXRlciB0byBib3RoIDpmdW5jOmBiYXNlX3VybCgpYCBhbmQgOmZ1bmM6YHNpdGVfdXJsKClgIHRoYXQgYWxsb3dzIGVuZm9yY2luZyBvZiBhIHByb3RvY29sIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgaW4gdGhlICpiYXNlX3VybCogY29uZmlndXJhdGlvbiBzZXR0aW5nLgogCiAgICAtICA6ZG9jOmBIVE1MIEhlbHBlciA8aGVscGVycy9odG1sX2hlbHBlcj5gIGNoYW5nZXMgaW5jbHVkZToKIApAQCAtMTI3LDEzICsxMzAsMTcgQEAKIAogICAgICAgLSBBZGRlZCAqd29yZF9sZW5ndGgqIGFuZCAqcG9vbCogb3B0aW9ucyB0byBhbGxvdyBjdXN0b21pemF0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgd29yZC4KICAgICAgIC0gQWRkZWQgKmNvbG9ycyogY29uZmlndXJhdGlvbiB0byBhbGxvdyBjdXN0b21pemF0aW9uIGZvciB0aGUgKmJhY2tncm91bmQqLCAqYm9yZGVyKiwgKnRleHQqIGFuZCAqZ3JpZCogY29sb3JzLgorICAgICAgLSBBZGRlZCAqZmlsZW5hbWUqIHRvIHRoZSByZXR1cm5lZCBhcnJheSBlbGVtZW50cy4KIAogICAgLSAgOmRvYzpgRGlyZWN0b3J5IEhlbHBlciA8aGVscGVycy9kaXJlY3RvcnlfaGVscGVyPmAgOmZ1bmM6YGRpcmVjdG9yeV9tYXAoKWAgd2lsbCBub3cgYXBwZW5kIGBgRElSRUNUT1JZX1NFUEFSQVRPUmBgIHRvIGRpcmVjdG9yeSBuYW1lcyBpbiB0aGUgcmV0dXJuZWQgYXJyYXkuCisgICAtICA6ZG9jOmBBcnJheSBIZWxwZXIgPGhlbHBlcnMvYXJyYXlfaGVscGVyPmAgOmZ1bmM6YGVsZW1lbnQoKWAgYW5kIDpwaHA6ZnVuYzpgZWxlbWVudHMoKWAgbm93IHJldHVybiBOVUxMIGluc3RlYWQgb2YgRkFMU0Ugd2hlbiB0aGUgcmVxdWlyZWQgZWxlbWVudHMgZG9uJ3QgZXhpc3QuCiAgICAtICA6ZG9jOmBMYW5ndWFnZSBIZWxwZXIgPGhlbHBlcnMvbGFuZ3VhZ2VfaGVscGVyPmAgOmZ1bmM6YGxhbmcoKWAgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwgbGlzdCBvZiBhZGRpdGlvbmFsIEhUTUwgYXR0cmlidXRlcy4KKyAgIC0gIENoYW5nZWQgdGhlIGRlZmF1bHQgdGFnIGZvciB1c2UgaW4gOmRvYzpgVGV4dCBIZWxwZXIgPGhlbHBlcnMvdGV4dF9oZWxwZXI+YCA6ZnVuYzpgaGlnaGxpZ2h0X3BocmFzZSgpYCB0byBgYDxtYXJrPmBgIChmb3JtZXJseSBgYDxzdHJvbmc+YGApLgogICAgLSAgRGVwcmVjYXRlZCB0aGUgOmRvYzpgRW1haWwgSGVscGVyIDxoZWxwZXJzL2VtYWlsX2hlbHBlcj5gIGFzIGl0cyBgYHZhbGlkX2VtYWlsKClgYCwgYGBzZW5kX2VtYWlsKClgYCBmdW5jdGlvbnMgYXJlIG5vdyBvbmx5IGFsaWFzZXMgZm9yIFBIUCBuYXRpdmUgZnVuY3Rpb25zIGBgZmlsdGVyX3ZhcigpYGAgYW5kIGBgbWFpbCgpYGAgcmVzcGVjdGl2ZWx5LgogCiAtICBEYXRhYmFzZQogCisgICAtICBERVBSRUNBVEVEIHRoZSAnbXlzcWwnLCAnc3FsaXRlJywgJ21zc3FsJyBhbmQgJ3Bkby9kYmxpYicgKGFsc28ga25vd24gYXMgJ3Bkby9tc3NxbCcgb3IgJ3Bkby9zeWJhc2UnKSBkcml2ZXJzLgogICAgLSAgQWRkZWQgKipkc24qKiBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIGRyaXZlcnMgdGhhdCBzdXBwb3J0IERTTiBzdHJpbmdzIChQRE8sIFBvc3RncmVTUUwsIE9yYWNsZSwgT0RCQywgQ1VCUklEKS4KICAgIC0gIEFkZGVkICoqc2NoZW1hKiogY29uZmlndXJhdGlvbiBzZXR0aW5nIChkZWZhdWx0cyB0byAqcHVibGljKikgZm9yIGRyaXZlcnMgdGhhdCBtaWdodCBuZWVkIGl0IChjdXJyZW50bHkgdXNlZCBieSBQb3N0Z3JlU1FMIGFuZCBPREJDKS4KICAgIC0gIEFkZGVkIHN1YmRyaXZlcnMgc3VwcG9ydCAoY3VycmVudGx5IG9ubHkgdXNlZCBieSBQRE8pLgpAQCAtMTUzLDYgKzE2MCw3IEBACiAgICAtICBBZGRlZCBzdXBwb3J0IGZvciBTUUxpdGUzIGRhdGFiYXNlIGRyaXZlci4KICAgIC0gIEFkZGVkIEludGVyYmFzZS9GaXJlYmlyZCBkYXRhYmFzZSBzdXBwb3J0IHZpYSB0aGUgKmliYXNlKiBkcml2ZXIuCiAgICAtICBBZGRlZCBPREJDIHN1cHBvcnQgZm9yIGBgY3JlYXRlX2RhdGFiYXNlKClgYCwgYGBkcm9wX2RhdGFiYXNlKClgYCBhbmQgYGBkcm9wX3RhYmxlKClgYCBpbiA6ZG9jOmBEYXRhYmFzZSBGb3JnZSA8ZGF0YWJhc2UvZm9yZ2U+YC4KKyAgIC0gIEFkZGVkICoqc2F2ZV9xdWVyaWVzKiogY29uZmlndXJhdGlvbiBzZXR0aW5nIHRvICphcHBsaWNhdGlvbi9jb25maWcvZGF0YWJhc2UucGhwKiAoZGVmYXVsdHMgdG8gYGBUUlVFYGApLgogCiAgICAtICA6ZG9jOmBRdWVyeSBCdWlsZGVyIDxkYXRhYmFzZS9xdWVyeV9idWlsZGVyPmAgY2hhbmdlcyBpbmNsdWRlOgogCkBAIC0xNjIsNiArMTcwLDcgQEAKICAgICAgIC0gQWRkZWQgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgYWxsb3dzIHRvIGRpc2FibGUgZXNjYXBpbmcgKHVzZWZ1bCBmb3IgY3VzdG9tIGZpZWxkcykgZm9yIG1ldGhvZHMgYGBqb2luKClgYCwgYGBvcmRlcl9ieSgpYGAsIGBgd2hlcmVfaW4oKWBgLCBgYG9yX3doZXJlX2luKClgYCwgYGB3aGVyZV9ub3RfaW4oKWBgLCBgYG9yX3doZXJlX25vdF9pbigpYGAsIGBgaW5zZXJ0KClgYCwgYGBpbnNlcnRfYmF0Y2goKWBgLgogICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBgYGpvaW4oKWBgIHdpdGggbXVsdGlwbGUgY29uZGl0aW9ucy4KICAgICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgKlVTSU5HKiBpbiBgYGpvaW4oKWBgLgorICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciAqRVhJU1RTKiBpbiBgYHdoZXJlKClgYC4KICAgICAgIC0gQWRkZWQgc2VlZCB2YWx1ZXMgc3VwcG9ydCBmb3IgcmFuZG9tIG9yZGVyaW5nIHdpdGggYGBvcmRlcl9ieShzZWVkLCAnUkFORE9NJylgYC4KICAgICAgIC0gQ2hhbmdlZCBgYGxpbWl0KClgYCB0byBpZ25vcmUgTlVMTCB2YWx1ZXMgaW5zdGVhZCBvZiBhbHdheXMgY2FzdGluZyB0byBpbnRlZ2VyLgogICAgICAgLSBDaGFuZ2VkIGBgb2Zmc2V0KClgYCB0byBpZ25vcmUgZW1wdHkgdmFsdWVzIGluc3RlYWQgb2YgYWx3YXlzIGNhc3RpbmcgdG8gaW50ZWdlci4KQEAgLTE3OSw2ICsxODgsNyBAQAogICAgICAgLSBTZXJ2ZXIgdmVyc2lvbiBjaGVja2luZyBpcyBub3cgZG9uZSB2aWEgYGBteXNxbGk6OiRzZXJ2ZXJfaW5mb2BgIGluc3RlYWQgb2YgcnVubmluZyBhbiBTUUwgcXVlcnkuCiAgICAgICAtIEFkZGVkIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgc3VwcG9ydCBmb3IgUEhQID49IDUuMy4KICAgICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgYGBiYWNrdXAoKWBgIGluIDpkb2M6YERhdGFiYXNlIFV0aWxpdGllcyA8ZGF0YWJhc2UvdXRpbGl0aWVzPmAuCisgICAgICAtIENoYW5nZWQgbWV0aG9kcyBgYHRyYW5zX2JlZ2luKClgYCwgYGB0cmFuc19jb21taXQoKWBgIGFuZCBgYHRyYW5zX3JvbGxiYWNrKClgYCB0byB1c2UgdGhlIFBIUCBBUEkgaW5zdGVhZCBvZiBzZW5kaW5nIHF1ZXJpZXMuCiAKICAgIC0gIEltcHJvdmVkIHN1cHBvcnQgb2YgdGhlIFBETyBkcml2ZXIsIGluY2x1ZGluZzoKIApAQCAtMTk2LDYgKzIwNiw3IEBACiAgICAgICAtIFJlbW92ZWQgYGBsaW1pdCgpYGAgYW5kIGBgb3JkZXJfYnkoKWBgIHN1cHBvcnQgZm9yICpVUERBVEUqIGFuZCAqREVMRVRFKiBxdWVyaWVzIGFzIFBvc3RncmVTUUwgZG9lcyBub3Qgc3VwcG9ydCB0aG9zZSBmZWF0dXJlcy4KICAgICAgIC0gQWRkZWQgYSB3b3JrLWFyb3VuZCBmb3IgZGVhZCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIHRvIGJlIHJlLWNyZWF0ZWQgYWZ0ZXIgYSBkYXRhYmFzZSByZXN0YXJ0LgogICAgICAgLSBDaGFuZ2VkIGBgZGJfY29ubmVjdCgpYGAgdG8gaW5jbHVkZSB0aGUgKG5ldykgKipzY2hlbWEqKiB2YWx1ZSBpbnRvIFBvc3RncmUncyAqKnNlYXJjaF9wYXRoKiogc2Vzc2lvbiB2YXJpYWJsZS4KKyAgICAgIC0gYGBwZ19lc2NhcGVfbGl0ZXJhbCgpYGAgaXMgbm93IHVzZWQgZm9yIGVzY2FwaW5nIHN0cmluZ3MsIGlmIGF2YWlsYWJsZS4KIAogICAgLSAgSW1wcm92ZWQgc3VwcG9ydCBvZiB0aGUgQ1VCUklEIGRyaXZlciwgaW5jbHVkaW5nOgogCkBAIC0yNjksOCArMjgwLDE0IEBACiAgICAgICAtICBBZGRlZCB0aGUgKiptaW5fd2lkdGgqKiBhbmQgKiptaW5faGVpZ2h0Kiogb3B0aW9ucyBmb3IgaW1hZ2VzLgogICAgICAgLSAgUmVtb3ZlZCBtZXRob2QgYGBjbGVhbl9maWxlX25hbWUoKWBgIGFuZCBpdHMgdXNhZ2UgaW4gZmF2b3Igb2YgOmRvYzpgU2VjdXJpdHkgTGlicmFyeSA8bGlicmFyaWVzL3NlY3VyaXR5PmAncyBgYHNhbml0aXplX2ZpbGVuYW1lKClgYC4KICAgICAgIC0gIEFkZGVkICoqZmlsZV9leHRfdG9sb3dlcioqIGNvbmZpZyBzZXR0aW5nLgorICAgICAgLSAgQWRkZWQgKiptb2RfbWltZV9maXgqKiBvcHRpb24gdG8gZGlzYWJsZSBzdWZmaXhpbmcgbXVsdGlwbGUgZmlsZSBleHRlbnNpb25zIHdpdGggYW4gdW5kZXJzY29yZS4KIAotICAgLSAgOmRvYzpgQ2FydCBsaWJyYXJ5IDxsaWJyYXJpZXMvY2FydD5gIGNoYW5nZXMgaW5jbHVkZToKKyAgIC0gIDpkb2M6YENhbGVuZGFyIExpYnJhcnkgPGxpYnJhcmllcy9jYWxlbmRhcj5gIGNoYW5nZXMgaW5jbHVkZToKKworICAgICAgLSAgQWRkZWQgY29uZmlndXJhdGlvbiB0byBnZW5lcmF0ZSBkYXlzIG9mIG90aGVyIG1vbnRocyBpbnN0ZWFkIG9mIGJsYW5rIGNlbGxzLgorICAgICAgLSAgQXV0byBzZXQgKm5leHRfcHJldl91cmwqIGlmIGl0IGlzIGVtcHR5IGFuZCAqc2hvd19wcmV2X25leHQqIGlzIHNldCB0byBUUlVFLgorCisgICAtICA6ZG9jOmBDYXJ0IExpYnJhcnkgPGxpYnJhcmllcy9jYXJ0PmAgY2hhbmdlcyBpbmNsdWRlOgogCiAgICAgICAtICBgYGluc2VydCgpYGAgbm93IGF1dG8taW5jcmVtZW50cyBxdWFudGl0eSBmb3IgYW4gaXRlbSB3aGVuIGluc2VydGVkIHR3aWNlIGluc3RlYWQgb2YgcmVzZXR0aW5nIGl0LCB0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBsYXJnZSBlLWNvbW1lcmNlIHNpdGVzLgogICAgICAgLSAgKlByb2R1Y3QgTmFtZSogc3RyaWN0bmVzcyBjYW4gYmUgZGlzYWJsZWQgYnkgc3dpdGNoaW5nIHRoZSBgYCRwcm9kdWN0X25hbWVfc2FmZWBgIHByb3BlcnR5IHRvIEZBTFNFLgpAQCAtMjc4LDcgKzI5NSw3IEBACiAgICAgICAtICBBZGRlZCBtZXRob2QgYGBnZXRfaXRlbSgpYGAgdG8gZW5hYmxlIHJldHJpZXZpbmcgZGF0YSBmb3IgYSBzaW5nbGUgY2FydCBpdGVtLgogICAgICAgLSAgQWRkZWQgdW5pY29kZSBzdXBwb3J0IGZvciBwcm9kdWN0IG5hbWVzLgogCi0gICAtICA6ZG9jOmBJbWFnZSBNYW5pcHVsYXRpb24gbGlicmFyeSA8bGlicmFyaWVzL2ltYWdlX2xpYj5gIGNoYW5nZXMgaW5jbHVkZToKKyAgIC0gIDpkb2M6YEltYWdlIE1hbmlwdWxhdGlvbiBMaWJyYXJ5IDxsaWJyYXJpZXMvaW1hZ2VfbGliPmAgY2hhbmdlcyBpbmNsdWRlOgogCiAgICAgICAtICBUaGUgYGBpbml0aWFsaXplKClgYCBtZXRob2Qgbm93IG9ubHkgc2V0cyBleGlzdGluZyBjbGFzcyBwcm9wZXJ0aWVzLgogICAgICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgMy1sZW5ndGggaGV4IGNvbG9yIHZhbHVlcyBmb3IgKndtX2ZvbnRfY29sb3IqIGFuZCAqd21fc2hhZG93X2NvbG9yKiBwcm9wZXJ0aWVzLCBhcyB3ZWxsIGFzIHZhbGlkYXRpb24gZm9yIHRoZW0uCkBAIC0yODcsNyArMzA0LDcgQEAKICAgICAgIC0gIFByb3BlcnR5ICptYWludGFpbl9yYXRpbyogaXMgbm93IHRha2VuIGludG8gYWNjb3VudCB3aGVuIHJlc2l6aW5nIGltYWdlcyB1c2luZyBJbWFnZU1hZ2ljayBsaWJyYXJ5LgogICAgICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgbWFpbnRhaW5pbmcgdHJhbnNwYXJlbmN5IGZvciBQTkcgaW1hZ2VzIGluIG1ldGhvZCBgYHRleHRfd2F0ZXJtYXJrKClgYC4KIAotICAgLSAgOmRvYzpgRm9ybSBWYWxpZGF0aW9uIGxpYnJhcnkgPGxpYnJhcmllcy9mb3JtX3ZhbGlkYXRpb24+YCBjaGFuZ2VzIGluY2x1ZGU6CisgICAtICA6ZG9jOmBGb3JtIFZhbGlkYXRpb24gTGlicmFyeSA8bGlicmFyaWVzL2Zvcm1fdmFsaWRhdGlvbj5gIGNoYW5nZXMgaW5jbHVkZToKIAogICAgICAgLSAgQWRkZWQgbWV0aG9kIGBgZXJyb3JfYXJyYXkoKWBgIHRvIHJldHVybiBhbGwgZXJyb3IgbWVzc2FnZXMgYXMgYW4gYXJyYXkuCiAgICAgICAtICBBZGRlZCBtZXRob2QgYGBzZXRfZGF0YSgpYGAgdG8gc2V0IGFuIGFsdGVybmF0aXZlIGRhdGEgYXJyYXkgdG8gYmUgdmFsaWRhdGVkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAkX1BPU1RgYC4KQEAgLTMwMywxOSArMzIwLDI1IEBACiAgICAgICAtICBBZGRlZCBzdXBwb3J0IGZvciBuYW1lZCBwYXJhbWV0ZXJzIGluIGVycm9yIG1lc3NhZ2VzLgogICAgICAgLSAgOmRvYzpgTGFuZ3VhZ2UgPGxpYnJhcmllcy9sYW5ndWFnZT5gIGxpbmUga2V5cyBtdXN0IG5vdyBiZSBwcmVmaXhlZCB3aXRoICoqZm9ybV92YWxpZGF0aW9uXyoqLgogICAgICAgLSAgQWRkZWQgcnVsZSAqKmFscGhhX251bWVyaWNfc3BhY2VzKiouCisgICAgICAtICBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gZXJyb3IgbWVzc2FnZXMgcGVyIGZpZWxkIHJ1bGUuCiAKICAgIC0gIDpkb2M6YENhY2hpbmcgTGlicmFyeSA8bGlicmFyaWVzL2NhY2hpbmc+YCBjaGFuZ2VzIGluY2x1ZGU6CiAKICAgICAgIC0gIEFkZGVkIFdpbmNhY2hlIGRyaXZlci4KICAgICAgIC0gIEFkZGVkIFJlZGlzIGRyaXZlci4KICAgICAgIC0gIEFkZGVkIGEgKmtleV9wcmVmaXgqIG9wdGlvbiBmb3IgY2FjaGUgSURzLgorICAgICAgLSAgVXBkYXRlZCBkcml2ZXIgYGBpc19zdXBwb3J0ZWQoKWBgIG1ldGhvZHMgdG8gbG9nIGF0IHRoZSAiZGVidWciIGxldmVsLgorICAgICAgLSAgQWRkZWQgb3B0aW9uIHRvIHN0b3JlIHJhdyB2YWx1ZXMgaW5zdGVhZCBvZiBDSS1mb3JtYXR0ZWQgb25lcyAoQVBDLCBNZW1jYWNoZSkuCisgICAgICAtICBBZGRlZCBhdG9taWMgaW5jcmVtZW50L2RlY3JlbWVudCBmZWF0dXJlIHZpYSBgYGluY3JlbWVudCgpYGAsIGBgZGVjcmVtZW50KClgYC4KIAotICAgLSAgOmRvYzpgRW1haWwgbGlicmFyeSA8bGlicmFyaWVzL2VtYWlsPmAgY2hhbmdlcyBpbmNsdWRlOgorICAgLSAgOmRvYzpgRW1haWwgTGlicmFyeSA8bGlicmFyaWVzL2VtYWlsPmAgY2hhbmdlcyBpbmNsdWRlOgogCi0gICAgICAtICBBZGRlZCBjdXN0b20gZmlsZW5hbWUgdG8gYGBFbWFpbDo6YXR0YWNoKClgYCBhcyBgYCR0aGlzLT5lbWFpbC0+YXR0YWNoKCRmaWxlbmFtZSwgJGRpc3Bvc2l0aW9uLCAkbmV3bmFtZSlgYC4KLSAgICAgIC0gIEFkZGVkIHBvc3NpYmlsaXR5IHRvIHNlbmQgYXR0YWNobWVudCBhcyBidWZmZXIgc3RyaW5nIGluIGBgRW1haWw6OmF0dGFjaCgpYGAgYXMgYGAkdGhpcy0+ZW1haWwtPmF0dGFjaCgkYnVmZmVyLCAkZGlzcG9zaXRpb24sICRuZXduYW1lLCAkbWltZSlgYC4KKyAgICAgIC0gIEFkZGVkIGEgY3VzdG9tIGZpbGVuYW1lIHBhcmFtZXRlciB0byBgYGF0dGFjaCgpYGAgYXMgYGAkdGhpcy0+ZW1haWwtPmF0dGFjaCgkZmlsZW5hbWUsICRkaXNwb3NpdGlvbiwgJG5ld25hbWUpYGAuCisgICAgICAtICBBZGRlZCBwb3NzaWJpbGl0eSB0byBzZW5kIGF0dGFjaG1lbnQgYXMgYnVmZmVyIHN0cmluZyBpbiBgYGF0dGFjaCgpYGAgYXMgYGAkdGhpcy0+ZW1haWwtPmF0dGFjaCgkYnVmZmVyLCAkZGlzcG9zaXRpb24sICRuZXduYW1lLCAkbWltZSlgYC4KKyAgICAgIC0gIEFkZGVkIHBvc3NpYmlsaXR5IHRvIGF0dGFjaCByZW1vdGUgZmlsZXMgYnkgcGFzc2luZyBhIFVSTC4KKyAgICAgIC0gIEFkZGVkIG1ldGhvZCBgYGF0dGFjaG1lbnRfY2lkKClgYCB0byBlbmFibGUgZW1iZWRkaW5nIGlubGluZSBhdHRhY2htZW50cyBpbnRvIEhUTUwuCiAgICAgICAtICBBZGRlZCBkc24gKGRlbGl2ZXJ5IHN0YXR1cyBub3RpZmljYXRpb24pIG9wdGlvbi4KLSAgICAgIC0gIFJlbmFtZWQgbWV0aG9kIF9zZXRfaGVhZGVyKCkgdG8gc2V0X2hlYWRlcigpIGFuZCBtYWRlIGl0IHB1YmxpYyB0byBlbmFibGUgYWRkaW5nIGN1c3RvbSBoZWFkZXJzIGluIHRoZSA6ZG9jOmBFbWFpbCBMaWJyYXJ5IDxsaWJyYXJpZXMvZW1haWw+YC4KKyAgICAgIC0gIFJlbmFtZWQgbWV0aG9kIGBgX3NldF9oZWFkZXIoKWBgIHRvIGBgc2V0X2hlYWRlcigpYGAgYW5kIG1hZGUgaXQgcHVibGljIHRvIGVuYWJsZSBhZGRpbmcgY3VzdG9tIGhlYWRlcnMuCiAgICAgICAtICBTdWNjZXNzZnVsbHkgc2VudCBlbWFpbHMgd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBwYXJhbWV0ZXJzLgogICAgICAgLSAgQWRkZWQgYSAqcmV0dXJuX3BhdGgqIHBhcmFtZXRlciB0byB0aGUgYGBmcm9tKClgYCBtZXRob2QuCiAgICAgICAtICBSZW1vdmVkIHRoZSBzZWNvbmQgcGFyYW1ldGVyIChjaGFyYWN0ZXIgbGltaXQpIGZyb20gaW50ZXJuYWwgbWV0aG9kIGBgX3ByZXBfcXVvdGVkX3ByaW50YWJsZSgpYGAgYXMgaXQgaXMgbmV2ZXIgdXNlZC4KQEAgLTMyNCw3ICszNDcsNyBAQAogICAgICAgLSAgUmVtb3ZlZCB1bnVzZWQgcHJvdGVjdGVkIG1ldGhvZCBgYF9nZXRfaXAoKWBgICg6ZG9jOmBJbnB1dCBMaWJyYXJ5IDxsaWJyYXJpZXMvaW5wdXQ+YCdzIGBgaXBfYWRkcmVzcygpYGAgc2hvdWxkIGJlIHVzZWQgYW55d2F5KS4KICAgICAgIC0gIEludGVybmFsIG1ldGhvZCBgYF9wcmVwX3FfZW5jb2RpbmcoKWBgIG5vdyB1dGlsaXplcyBQSFAncyAqbWJzdHJpbmcqIGFuZCAqaWNvbnYqIGV4dGVuc2lvbnMgKHdoZW4gYXZhaWxhYmxlKSBhbmQgbm8gbG9uZ2VyIGhhcyBhIHNlY29uZCAoYGAkZnJvbWBgKSBhcmd1bWVudC4KICAgICAgIC0gIEFkZGVkIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBgYHByaW50X2RlYnVnZ2VyKClgYCB0byBhbGxvdyBzcGVjaWZ5aW5nIHdoaWNoIHBhcnRzIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBwcmludGVkICgnaGVhZGVycycsICdzdWJqZWN0JywgJ2JvZHknKS4KLSAgICAgIC0gIEFkZGVkIFNNVFAga2VlcGFsaXZlIG9wdGlvbiB0byBhdm9pZCBvcGVuaW5nIHRoZSBjb25uZWN0aW9uIGZvciBlYWNoIGBgRW1haWw6OnNlbmQoKWBgLiBBY2Nlc3NpYmxlIGFzIGBgJHNtdHBfa2VlcGFsaXZlYGAuCisgICAgICAtICBBZGRlZCBTTVRQIGtlZXBhbGl2ZSBvcHRpb24gdG8gYXZvaWQgb3BlbmluZyB0aGUgY29ubmVjdGlvbiBmb3IgZWFjaCBgYHNlbmQoKWBgIGNhbGwuIEFjY2Vzc2libGUgYXMgYGAkc210cF9rZWVwYWxpdmVgYC4KICAgICAgIC0gIFB1YmxpYyBtZXRob2QgYGBzZXRfaGVhZGVyKClgYCBub3cgZmlsdGVycyB0aGUgaW5wdXQgYnkgcmVtb3ZpbmcgYWxsICJcXHIiIGFuZCAiXFxuIiBjaGFyYWN0ZXJzLgogCiAgICAtICA6ZG9jOmBQYWdpbmF0aW9uIExpYnJhcnkgPGxpYnJhcmllcy9wYWdpbmF0aW9uPmAgY2hhbmdlcyBpbmNsdWRlOgpAQCAtMzM0LDcgKzM1Nyw2IEBACiAgICAgICAtICBEZXByZWNhdGVkIHVzYWdlIG9mIHRoZSAiYW5jaG9yX2NsYXNzIiBzZXR0aW5nICh1c2UgdGhlIG5ldyAiYXR0cmlidXRlcyIgc2V0dGluZyBpbnN0ZWFkKS4KICAgICAgIC0gIEFkZGVkICRjb25maWdbJ3JldXNlX3F1ZXJ5X3N0cmluZyddIHRvIGFsbG93IGF1dG9tYXRpYyByZXBvcHVsYXRpb24gb2YgcXVlcnkgc3RyaW5nIGFyZ3VtZW50cywgY29tYmluZWQgd2l0aCBub3JtYWwgVVJJIHNlZ21lbnRzLgogICAgICAgLSAgUmVtb3ZlZCB0aGUgZGVmYXVsdCBgYCZuYnNwO2BgIGZyb20gYSBudW1iZXIgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgotICAgICAgLSAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gdXNlIGEgcHJveHkgd2l0aCB0aGUgOmRvYzpgWE1MLVJQQyBMaWJyYXJ5IDxsaWJyYXJpZXMveG1scnBjPmAuCiAKICAgIC0gIDpkb2M6YEVuY3J5cHRpb24gTGlicmFyeSA8bGlicmFyaWVzL2VuY3J5cHRpb24+YCBjaGFuZ2VzIGluY2x1ZGU6CiAKQEAgLTM0NiwzNCArMzY4LDY0IEBACiAgICAgICAtICBEYXRhYmFzZSBvYmplY3QgbmFtZXMgYXJlIG5vdyBiZWluZyBkaXNwbGF5ZWQuCiAgICAgICAtICBUaGUgc3VtIG9mIGFsbCBxdWVyaWVzIHJ1bm5pbmcgdGltZXMgaW4gc2Vjb25kcyBpcyBub3cgYmVpbmcgZGlzcGxheWVkLgogICAgICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgZGlzcGxheWluZyB0aGUgSFRUUCBETlQgKCJEbyBOb3QgVHJhY2siKSBoZWFkZXIuCisgICAgICAtICBBZGRlZCBzdXBwb3J0IGZvciBkaXNwbGF5aW5nIGBgJF9GSUxFU2BgLgogCiAgICAtICA6ZG9jOmBNaWdyYXRpb24gTGlicmFyeSA8bGlicmFyaWVzL21pZ3JhdGlvbj5gIGNoYW5nZXMgaW5jbHVkZToKIAogICAgICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgdGltZXN0YW1wLWJhc2VkIG1pZ3JhdGlvbnMgKGVuYWJsZWQgYnkgZGVmYXVsdCkuCiAgICAgICAtICBBZGRlZCBgYCRjb25maWdbJ21pZ3JhdGlvbl90eXBlJ11gYCB0byBhbGxvdyBzd2l0Y2hpbmcgYmV0d2VlbiAqc2VxdWVudGlhbCogYW5kICp0aW1lc3RhbXAqIG1pZ3JhdGlvbnMuCiAKLSAgIC0gIDpkb2M6YFVzZXIgQWdlbnQgTGlicmFyeSA8bGlicmFyaWVzL3VzZXJfYWdlbnQ+YCB3aWxsIG5vdyBjaGVjayBpZiByb2JvdHMgYXJlIHByZXRlbmRpbmcgdG8gYmUgbW9iaWxlIGNsaWVudHMgKGhlbHBzIHdpdGggZS5nLiBHb29nbGUgaW5kZXhpbmcgbW9iaWxlIHdlYnNpdGUgdmVyc2lvbnMpLgorICAgLSAgOmRvYzpgWE1MLVJQQyBMaWJyYXJ5IDxsaWJyYXJpZXMveG1scnBjPmAgY2hhbmdlcyBpbmNsdWRlOgorCisgICAgICAtICBBZGRlZCB0aGUgYWJpbGl0eSB0byB1c2UgYSBwcm94eS4KKyAgICAgIC0gIEFkZGVkIEJhc2ljIEhUVFAgYXV0aGVudGljYXRpb24gc3VwcG9ydC4KKworICAgLSAgOmRvYzpgVXNlciBBZ2VudCBMaWJyYXJ5IDxsaWJyYXJpZXMvdXNlcl9hZ2VudD5gIGNoYW5nZXMgaW5jbHVkZToKKworICAgICAgLSBBZGRlZCBjaGVjayB0byBkZXRlY3QgaWYgcm9ib3RzIGFyZSBwcmV0ZW5kaW5nIHRvIGJlIG1vYmlsZSBjbGllbnRzIChoZWxwcyB3aXRoIGUuZy4gR29vZ2xlIGluZGV4aW5nIG1vYmlsZSB3ZWJzaXRlIHZlcnNpb25zKS4KKyAgICAgIC0gQWRkZWQgbWV0aG9kIGBgcGFyc2UoKWBgIHRvIGFsbG93IHBhcnNpbmcgYSBjdXN0b20gdXNlci1hZ2VudCBzdHJpbmcsIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHZpc2l0b3Incy4KKwogICAgLSAgQWRkZWQgc3VwcG9ydCBmb3Igc2V0dGluZyA6ZG9jOmBUYWJsZSA8bGlicmFyaWVzL3RhYmxlPmAgY2xhc3MgZGVmYXVsdHMgaW4gYSBjb25maWcgZmlsZS4KKyAgIC0gIDpkb2M6YFppcCBMaWJyYXJ5IDxsaWJyYXJpZXMvemlwPmAgbWV0aG9kIGBgcmVhZF9maWxlKClgYCBjYW4gbm93IGFsc28gYWx0ZXIgdGhlIG9yaWdpbmFsIGZpbGUgcGF0aC9uYW1lIHdoaWxlIGFkZGluZyBmaWxlcyB0byBhbiBhcmNoaXZlLgogCiAtICBDb3JlCiAKKyAgIC0gIDpkb2M6YFJvdXRpbmcgPGdlbmVyYWwvcm91dGluZz5gIGNoYW5nZXMgaW5jbHVkZToKKworICAgICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGV2ZWxzIG9mIGNvbnRyb2xsZXIgZGlyZWN0b3JpZXMuCisgICAgICAtICBBZGRlZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5ICpkZWZhdWx0X2NvbnRyb2xsZXIqIGFuZCAqNDA0X292ZXJyaWRlKiBjbGFzc2VzLgorICAgICAgLSAgQWRkZWQgcG9zc2liaWxpdHkgdG8gcm91dGUgcmVxdWVzdHMgdXNpbmcgSFRUUCB2ZXJicy4KKyAgICAgIC0gIEFkZGVkIHBvc3NpYmlsaXR5IHRvIHJvdXRlIHJlcXVlc3RzIHVzaW5nIGNhbGxiYWNrcy4KKyAgICAgIC0gIEFkZGVkIGEgbmV3IHJlc2VydmVkIHJvdXRlICgqdHJhbnNsYXRlX3VyaV9kYXNoZXMqKSB0byBhbGxvdyB1c2FnZSBvZiBkYXNoZXMgaW4gdGhlIGNvbnRyb2xsZXIgYW5kIG1ldGhvZCBVUkkgc2VnbWVudHMuCisgICAgICAtICBEZXByZWNhdGVkIG1ldGhvZHMgYGBmZXRjaF9kaXJlY3RvcnkoKWBgLCBgYGZldGNoX2NsYXNzKClgYCBhbmQgYGBmZXRjaF9tZXRob2QoKWBgIGluIGZhdm9yIG9mIHRoZWlyIHJlc3BlY3RpdmUgcHVibGljIHByb3BlcnRpZXMuCisgICAgICAtICBSZW1vdmVkIG1ldGhvZCBgYF9zZXRfb3ZlcnJpZGVzKClgYCBhbmQgbW92ZWQgaXRzIGxvZ2ljIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKwogICAgLSAgOmRvYzpgVVJJIExpYnJhcnkgPGxpYnJhcmllcy91cmk+YCBjaGFuZ2VzIGluY2x1ZGU6CiAKKyAgICAgIC0gIEFkZGVkIGNvbmRpdGlvbmFsIFBDUkUgVVRGLTggc3VwcG9ydCB0byB0aGUgImludmFsaWQgVVJJIGNoYXJhY3RlcnMiIGNoZWNrIGFuZCByZW1vdmVkIHRoZSBgYHByZWdfcXVvdGUoKWBgIGNhbGwgZnJvbSBpdCB0byBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5LgorICAgICAgLSAgUmVuYW1lZCBtZXRob2QgYGBfZmlsdGVyX3VyaSgpYGAgdG8gYGBmaWx0ZXJfdXJpKClgYC4KICAgICAgIC0gIENoYW5nZWQgcHJpdmF0ZSBtZXRob2RzIHRvIHByb3RlY3RlZCBzbyB0aGF0IE1ZX1VSSSBjYW4gb3ZlcnJpZGUgdGhlbS4KICAgICAgIC0gIFJlbmFtZWQgaW50ZXJuYWwgbWV0aG9kIGBgX3BhcnNlX2NsaV9hcmdzKClgYCB0byBgYF9wYXJzZV9hcmd2KClgYC4KICAgICAgIC0gIFJlbmFtZWQgaW50ZXJuYWwgbWV0aG9kIGBgX2RldGVjdF91cmkoKWBgIHRvIGBgX3BhcnNlX3JlcXVlc3RfdXJpKClgYC4KICAgICAgIC0gIENoYW5nZWQgYGBfcGFyc2VfcmVxdWVzdF91cmkoKWBgIHRvIGFjY2VwdCBhYnNvbHV0ZSBVUklzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSFRUUC8xLjEgYXMgcGVyIGBSRkMyNjE2IDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNjE2LnR4dD5gLgogICAgICAgLSAgQWRkZWQgcHJvdGVjdGVkIG1ldGhvZCBgYF9wYXJzZV9xdWVyeV9zdHJpbmcoKWBgIHRvIFVSSSBwYXRocyBpbiB0aGUgdGhlICoqUVVFUllfU1RSSU5HKiogdmFsdWUsIGxpa2UgYGBfcGFyc2VfcmVxdWVzdF91cmkoKWBgIGRvZXMuCiAgICAgICAtICBDaGFuZ2VkIGBgX2ZldGNoX3VyaV9zdHJpbmcoKWBgIHRvIHRyeSB0aGUgKipQQVRIX0lORk8qKiB2YXJpYWJsZSBmaXJzdCB3aGVuIGF1dG8tZGV0ZWN0aW5nLgorICAgICAgLSAgUmVtb3ZlZCBtZXRob2RzIGBgX3JlbW92ZV91cmxfc3VmZml4KClgYCwgYGBfZXhwbG9kZV9zZWdtZW50cygpYGAgYW5kIG1vdmVkIHRoZWlyIGxvZ2ljIGludG8gYGBfc2V0X3VyaV9zdHJpbmcoKWBgLgorICAgICAgLSAgUmVtb3ZlZCBtZXRob2QgYGBfZmV0Y2hfdXJpX3N0cmluZygpYGAgYW5kIG1vdmVkIGl0cyBsb2dpYyBpbnRvIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgIC0gIFJlbW92ZWQgbWV0aG9kIGBgX3JlaW5kZXhfc2VnbWVudHMoKWBgLgogCiAgICAtICA6ZG9jOmBMb2FkZXIgTGlicmFyeSA8bGlicmFyaWVzL2xvYWRlcj5gIGNoYW5nZXMgaW5jbHVkZToKIAorICAgICAgLSAgQWRkZWQgbWV0aG9kIGNoYWluaW5nIHN1cHBvcnQuCiAgICAgICAtICBBZGRlZCBtZXRob2QgYGBnZXRfdmFycygpYGAgdG8gdGhlIExvYWRlciB0byByZXRyaWV2ZSBhbGwgdmFyaWFibGVzIGxvYWRlZCB3aXRoIGBgJHRoaXMtPmxvYWQtPnZhcnMoKWBgLgogICAgICAgLSAgYGBfY2lfYXV0b2xvYWRlcigpYGAgaXMgbm93IGEgcHJvdGVjdGVkIG1ldGhvZC4KICAgICAgIC0gIEFkZGVkIGF1dG9sb2FkaW5nIG9mIGRyaXZlcnMgd2l0aCBgYCRhdXRvbG9hZFsnZHJpdmVycyddYGAuCiAgICAgICAtICBgYCRjb25maWdbJ3Jld3JpdGVfc2hvcnRfdGFncyddYGAgbm93IGhhcyBubyBlZmZlY3Qgd2hlbiB1c2luZyBQSFAgNS40IGFzIGBgPD89YGAgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlLgogICAgICAgLSAgQ2hhbmdlZCBtZXRob2QgYGBjb25maWcoKWBgIHRvIHJldHVybiB3aGF0ZXZlciBgYENJX0NvbmZpZzo6bG9hZCgpYGAgcmV0dXJucyBpbnN0ZWFkIG9mIGFsd2F5cyBiZWluZyB2b2lkLgotICAgICAgLSAgQWRkZWQgc3VwcG9ydCBmb3IgbW9kZWwgYWxpYXNpbmcgb24gYXV0b2xvYWQuCisgICAgICAtICBBZGRlZCBzdXBwb3J0IGZvciBsaWJyYXJ5IGFuZCBtb2RlbCBhbGlhc2luZyBvbiBhdXRvbG9hZC4KKyAgICAgIC0gIENoYW5nZWQgbWV0aG9kIGBgaXNfbG9hZGVkKClgYCB0byBhc2sgZm9yIHRoZSAoY2FzZSBzZW5zaXRpdmUpIGxpYnJhcnkgbmFtZSBpbnN0ZWFkIG9mIGl0cyBpbnN0YW5jZSBuYW1lLgorICAgICAgLSAgUmVtb3ZlZCBgYCRfYmFzZV9jbGFzc2VzYGAgcHJvcGVydHkgYW5kIHVuaWZpZWQgYWxsIGNsYXNzIGRhdGEgaW4gYGAkX2NpX2NsYXNzZXNgYCBpbnN0ZWFkLgorICAgICAgLSAgQWRkZWQgbWV0aG9kIGBgY2xlYXJfdmFycygpYGAgdG8gYWxsb3cgY2xlYXJpbmcgdGhlIGNhY2hlZCB2YXJpYWJsZXMgZm9yIHZpZXdzLgogCiAgICAtICA6ZG9jOmBJbnB1dCBMaWJyYXJ5IDxsaWJyYXJpZXMvaW5wdXQ+YCBjaGFuZ2VzIGluY2x1ZGU6CiAKQEAgLTM4Myw3ICs0MzUsMTEgQEAKICAgICAgIC0gIENoYW5nZWQgbWV0aG9kIGBgdmFsaWRfaXAoKWBgIHRvIHVzZSBQSFAncyBuYXRpdmUgYGBmaWx0ZXJfdmFyKClgYCBmdW5jdGlvbi4KICAgICAgIC0gIENoYW5nZWQgaW50ZXJuYWwgbWV0aG9kIGBgX3Nhbml0aXplX2dsb2JhbHMoKWBgIHRvIHNraXAgZW5mb3JjaW5nIHJldmVyc2FsIG9mICpyZWdpc3Rlcl9nbG9iYWxzKiBpbiBQSFAgNS40Kywgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IG5vIGxvbmdlciBleGlzdHMuCiAgICAgICAtICBDaGFuZ2VkIG1ldGhvZHMgYGBnZXQoKWBgLCBgYHBvc3QoKWBgLCBgYGdldF9wb3N0KClgYCwgYGBjb29raWUoKWBgLCBgYHNlcnZlcigpYGAsIGBgdXNlcl9hZ2VudCgpYGAgdG8gcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBGQUxTRSB3aGVuIG5vIHZhbHVlIGlzIGZvdW5kLgorICAgICAgLSAgQ2hhbmdlZCBkZWZhdWx0IHZhbHVlIG9mIHRoZSBgYCR4c3NfY2xlYW5gYCBwYXJhbWV0ZXIgdG8gTlVMTCBmb3IgYWxsIG1ldGhvZHMgdGhhdCB1dGlsaXplIGl0LCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBub3cgZGV0ZXJtaW5lZCBieSB0aGUgYGAkY29uZmlnWydnbG9iYWxfeHNzX2ZpbHRlcmluZyddYGAgc2V0dGluZy4KKyAgICAgIC0gIEFkZGVkIG1ldGhvZCBgYHBvc3RfZ2V0KClgYCBhbmQgY2hhbmdlZCBgYGdldF9wb3N0KClgYCB0byBzZWFyY2ggaW4gR0VUIGRhdGEgZmlyc3QuIEJvdGggbWV0aG9kcycgbmFtZXMgbm93IHByb3Blcmx5IG1hdGNoIHRoZWlyIEdFVC9QT1NUIGRhdGEgc2VhcmNoIHByaW9yaXRpZXMuCiAgICAgICAtICBDaGFuZ2VkIG1ldGhvZCBgYF9mZXRjaF9mcm9tX2FycmF5KClgYCB0byBwYXJzZSBhcnJheSBub3RhdGlvbiBpbiBmaWVsZCBuYW1lLgorICAgICAgLSAgQWRkZWQgYW4gb3B0aW9uIGZvciBgYF9jbGVhbl9pbnB1dF9rZXlzKClgYCB0byByZXR1cm4gRkFMU0UgaW5zdGVhZCBvZiB0ZXJtaW5hdGluZyB0aGUgd2hvbGUgc2NyaXB0LgorICAgICAgLSAgRGVwcmVjYXRlZCB0aGUgYGBpc19jbGlfcmVxdWVzdCgpYGAgbWV0aG9kLCBpdCBpcyBub3cgYW4gYWxpYXMgZm9yIHRoZSBuZXcgOnBocDpmdW5jOmBpc19jbGkoKWAgY29tbW9uIGZ1bmN0aW9uLgogCiAgICAtICA6ZG9jOmBDb21tb24gZnVuY3Rpb25zIDxnZW5lcmFsL2NvbW1vbl9mdW5jdGlvbnM+YCBjaGFuZ2VzIGluY2x1ZGU6CiAKQEAgLTM5Miw0MiArNDQ4LDQ2IEBACiAgICAgICAtICBSZW1vdmVkIHJlZHVuZGFudCBjb25kaXRpb25hbCB0byBkZXRlcm1pbmUgSFRUUCBzZXJ2ZXIgcHJvdG9jb2wgaW4gOmZ1bmM6YHNldF9zdGF0dXNfaGVhZGVyKClgLgogICAgICAgLSAgQ2hhbmdlZCBgYF9leGNlcHRpb25faGFuZGxlcigpYGAgdG8gcmVzcGVjdCBwaHAuaW5pICpkaXNwbGF5X2Vycm9ycyogc2V0dGluZy4KICAgICAgIC0gIEFkZGVkIGZ1bmN0aW9uIDpmdW5jOmBpc19odHRwcygpYCB0byBjaGVjayBpZiBhIHNlY3VyZSBjb25uZWN0aW9uIGlzIHVzZWQuCisgICAgICAtICBBZGRlZCBmdW5jdGlvbiA6ZnVuYzpgaXNfY2xpKClgIHRvIHJlcGxhY2UgdGhlIGBgQ0lfSW5wdXQ6OmlzX2NsaV9yZXF1ZXN0KClgYCBtZXRob2QuCiAgICAgICAtICBBZGRlZCBmdW5jdGlvbiA6ZnVuYzpgZnVuY3Rpb25fdXNhYmxlKClgIHRvIGNoZWNrIGlmIGEgZnVuY3Rpb24gZXhpc3RzIGFuZCBpcyBub3QgZGlzYWJsZWQgYnkgYFN1aG9zaW4gPGh0dHA6Ly93d3cuaGFyZGVuZWQtcGhwLm5ldC9zdWhvc2luLz5gLgorICAgICAgLSAgUmVtb3ZlZCB0aGUgdGhpcmQgKGAkcGhwX2Vycm9yYCkgZnJvbSBmdW5jdGlvbiA6ZnVuYzpgbG9nX21lc3NhZ2UoKWAuCiAKICAgIC0gIDpkb2M6YE91dHB1dCBMaWJyYXJ5IDxsaWJyYXJpZXMvb3V0cHV0PmAgY2hhbmdlcyBpbmNsdWRlOgogCiAgICAgICAtICBBZGRlZCBhIHNlY29uZCBhcmd1bWVudCB0byBtZXRob2QgYGBzZXRfY29udGVudF90eXBlKClgYCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZSBkb2N1bWVudCBjaGFyc2V0IGFzIHdlbGwuCiAgICAgICAtICBBZGRlZCBtZXRob2RzIGBgZ2V0X2NvbnRlbnRfdHlwZSgpYGAgYW5kIGBgZ2V0X2hlYWRlcigpYGAuCiAgICAgICAtICBBZGRlZCBtZXRob2QgYGBkZWxldGVfY2FjaGUoKWBgLgorICAgICAgLSAgQ2hhbmdlZCBjYWNoaW5nIGJlaGF2aW9yIHRvIGNvbXByZXNzIHRoZSBvdXRwdXQgYmVmb3JlIHN0b3JpbmcgaXQsIGlmIGBgJGNvbmZpZ1snY29tcHJlc3Nfb3V0cHV0J11gYCBpcyBlbmFibGVkLgogCiAgICAtICA6ZG9jOmBDb25maWcgTGlicmFyeSA8bGlicmFyaWVzL2NvbmZpZz5gIGNoYW5nZXMgaW5jbHVkZToKIAogICAgICAgLSAgQ2hhbmdlZCBgYHNpdGVfdXJsKClgYCBtZXRob2QgIHRvIGFjY2VwdCBhbiBhcnJheSBhcyB3ZWxsLgogICAgICAgLSAgUmVtb3ZlZCBpbnRlcm5hbCBtZXRob2QgYGBfYXNzaWduX3RvX2NvbmZpZygpYGAgYW5kIG1vdmVkIGl0cyBpbXBsZW1lbnRhdGlvbiB0byAqQ29kZUlnbml0ZXIucGhwKiBpbnN0ZWFkLgorICAgICAgLSAgYGBpdGVtKClgYCBub3cgcmV0dXJucyBOVUxMIGluc3RlYWQgb2YgRkFMU0Ugd2hlbiB0aGUgcmVxdWlyZWQgY29uZmlnIGl0ZW0gZG9lc24ndCBleGlzdC4KKyAgICAgIC0gIEFkZGVkIGFuIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgdG8gYm90aCBgYGJhc2VfdXJsKClgYCBhbmQgYGBzaXRlX3VybCgpYGAgdGhhdCBhbGxvd3MgZW5mb3JjaW5nIG9mIGEgcHJvdG9jb2wgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSBpbiB0aGUgKmJhc2VfdXJsKiBjb25maWd1cmF0aW9uIHNldHRpbmcuCiAKICAgIC0gIDpkb2M6YFNlY3VyaXR5IExpYnJhcnkgPGxpYnJhcmllcy9zZWN1cml0eT5gIGNoYW5nZXMgaW5jbHVkZToKIAogICAgICAgLSAgQWRkZWQgbWV0aG9kIGBgc3RyaXBfaW1hZ2VfdGFncygpYGAuCiAgICAgICAtICBBZGRlZCBgYCRjb25maWdbJ2NzcmZfcmVnZW5lcmF0aW9uJ11gYCwgd2hpY2ggbWFrZXMgdG9rZW4gcmVnZW5lcmF0aW9uIG9wdGlvbmFsLgogICAgICAgLSAgQWRkZWQgYGAkY29uZmlnWydjc3JmX2V4Y2x1ZGVfdXJpcyddYGAsIHdoaWNoIGFsbG93cyB5b3UgbGlzdCBVUklzIHdoaWNoIHdpbGwgbm90IGhhdmUgdGhlIENTUkYgdmFsaWRhdGlvbiBtZXRob2RzIHJ1bi4KLQotICAgLSAgOmRvYzpgVVJJIFJvdXRpbmcgPGdlbmVyYWwvcm91dGluZz5gIGNoYW5nZXMgaW5jbHVkZToKLQotICAgICAgLSAgQWRkZWQgcG9zc2liaWxpdHkgdG8gcm91dGUgcmVxdWVzdHMgdXNpbmcgY2FsbGJhY2tzLgotICAgICAgLSAgQWRkZWQgYSBuZXcgcmVzZXJ2ZWQgcm91dGUgKCp0cmFuc2xhdGVfdXJpX2Rhc2hlcyopIHRvIGFsbG93IHVzYWdlIG9mIGRhc2hlcyBpbiB0aGUgY29udHJvbGxlciBhbmQgbWV0aG9kIFVSSSBzZWdtZW50cy4KLSAgICAgIC0gIERlcHJlY2F0ZWQgbWV0aG9kcyBgYGZldGNoX2RpcmVjdG9yeSgpYGAsIGBgZmV0Y2hfY2xhc3MoKWBgIGFuZCBgYGZldGNoX21ldGhvZCgpYGAgaW4gZmF2b3Igb2YgdGhlaXIgcmVzcGVjdGl2ZSBwdWJsaWMgcHJvcGVydGllcy4KKyAgICAgIC0gIE1vZGlmaWVkIG1ldGhvZCBgYHNhbml0aXplX2ZpbGVuYW1lKClgYCB0byByZWFkIGEgcHVibGljIGBgJGZpbGVuYW1lX2JhZF9jaGFyc2BgIHByb3BlcnR5IGZvciBnZXR0aW5nIHRoZSBpbnZhbGlkIGNoYXJhY3RlcnMgbGlzdC4KIAogICAgLSAgOmRvYzpgTGFuZ3VhZ2UgTGlicmFyeSA8bGlicmFyaWVzL2xhbmd1YWdlPmAgY2hhbmdlcyBpbmNsdWRlOgogCi0gICAgICAtICBDaGFuZ2VkIG1ldGhvZCBgYGxvYWQoKWBgIHRvIGZpbHRlciB0aGUgbGFuZ3VhZ2UgbmFtZSB3aXRoIGBgY3R5cGVfZGlnaXQoKWBgLgorICAgICAgLSAgQ2hhbmdlZCBtZXRob2QgYGBsb2FkKClgYCB0byBmaWx0ZXIgdGhlIGxhbmd1YWdlIG5hbWUgd2l0aCBgYGN0eXBlX2FscGhhKClgYC4KICAgICAgIC0gIEFkZGVkIGFuIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgdG8gbWV0aG9kIGBgbGluZSgpYGAgdG8gZGlzYWJsZSBlcnJvciBsb2dpbiBmb3IgbGluZSBrZXlzIHRoYXQgd2VyZSBub3QgZm91bmQuCiAgICAgICAtICBMYW5ndWFnZSBmaWxlcyBhcmUgbm93IGxvYWRlZCBpbiBhIGNhc2NhZGluZyBzdHlsZSB3aXRoIHRoZSBvbmUgaW4gKipzeXN0ZW0vKiogYWx3YXlzIGxvYWRlZCBhbmQgb3ZlcnJpZGVuIGFmdGVyd2FyZHMsIGlmIGFub3RoZXIgb25lIGlzIGZvdW5kLgogCisgICAtICA6ZG9jOmBIb29rcyBMaWJyYXJ5IDxnZW5lcmFsL2hvb2tzPmAgY2hhbmdlcyBpbmNsdWRlOgorICAgICAgLSAgUmVuYW1lZCBtZXRob2QgYGBfY2FsbF9ob29rKClgYCB0byBgYGNhbGxfaG9vaygpYGAuCisgICAgICAtICBDbGFzcyBpbnN0YW5jZXMgYXJlIG5vdyBzdG9yZWQgaW4gb3JkZXIgdG8gbWFpbnRhaW4gdGhlaXIgc3RhdGUuCisKICAgIC0gIFJlbW92ZWQgYGBDSV9DT1JFYGAgYm9vbGVhbiBjb25zdGFudCBmcm9tICpDb2RlSWduaXRlci5waHAqIChubyBsb25nZXIgUmVhY3RvciBhbmQgQ29yZSB2ZXJzaW9ucykuCiAgICAtICBMb2cgTGlicmFyeSB3aWxsIG5vdyB0cnkgdG8gY3JlYXRlIHRoZSAqKmxvZ19wYXRoKiogZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCiAgICAtICBBZGRlZCBzdXBwb3J0IGZvciBIVFRQLU9ubHkgY29va2llcyB3aXRoIG5ldyBjb25maWcgb3B0aW9uICpjb29raWVfaHR0cG9ubHkqIChkZWZhdWx0IEZBTFNFKS4KLSAgIC0gIFJlbmFtZWQgbWV0aG9kIGBgX2NhbGxfaG9vaygpYGAgdG8gYGBjYWxsX2hvb2soKWBgIGluIHRoZSA6ZG9jOmBIb29rcyBMaWJyYXJ5IDxnZW5lcmFsL2hvb2tzPmAuCiAgICAtICBgYCRjb25maWdbJ3RpbWVfcmVmZXJlbmNlJ11gYCBub3cgc3VwcG9ydHMgYWxsIHRpbWV6b25lIHN0cmluZ3Mgc3VwcG9ydGVkIGJ5IFBIUC4KKyAgIC0gIEZhdGFsIFBIUCBlcnJvcnMgYXJlIG5vdyBhbHNvIHBhc3NlZCB0byBgYF9leGNlcHRpb25faGFuZGxlcigpYGAsIHNvIHRoZXkgY2FuIGJlIGxvZ2dlZC4KIAogCiBCdWcgZml4ZXMgZm9yIDMuMApAQCAtNDU2LDcgKzUxNiw3IEBACiAtICBGaXhlZCBhIHBvc3NpYmxlIGJ1ZyBpbiBgYENJX0lucHV0Ojppc19hamF4X3JlcXVlc3QoKWBgIHdoZXJlIHNvbWUgY2xpZW50cyBtaWdodCBub3Qgc2VuZCB0aGUgWC1SZXF1ZXN0ZWQtV2l0aCBIVFRQIGhlYWRlciB2YWx1ZSBleGFjdGx5IGFzICdYbWxIdHRwUmVxdWVzdCcuCiAtICBGaXhlZCBhIGJ1ZyAoIzEwMzkpIC0gTXlTUUwncyBfYmFja3VwKCkgbWV0aG9kIGZhaWxlZCBkdWUgdG8gYSB0YWJsZSBuYW1lIG5vdCBiZWluZyBlc2NhcGVkLgogLSAgRml4ZWQgYSBidWcgKCMxMDcwKSAtIENJX0RCX2RyaXZlcjo6aW5pdGlhbGl6ZSgpIGRpZG4ndCBzZXQgYSBjaGFyYWN0ZXIgc2V0IGlmIGEgZGF0YWJhc2UgaXMgbm90IHNlbGVjdGVkLgotLSAgRml4ZWQgYSBidWcgKCMxNzcpIC0gQ0lfRm9ybV92YWxpZGF0aW9uOjpzZXRfdmFsdWUoKSBkaWRuJ3Qgc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIFBPU1QgZGF0YSBpcyBOVUxMLgorLSAgRml4ZWQgYSBidWcgKCMxNzcpIC0gYGBDSV9Gb3JtX3ZhbGlkYXRpb246OnNldF92YWx1ZSgpYGAgZGlkbid0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBQT1NUIGRhdGEgaXMgTlVMTC4KIC0gIEZpeGVkIGEgYnVnICgjNjgsICM0MTQpIC0gT3JhY2xlJ3MgZXNjYXBlX3N0cigpIGRpZG4ndCBwcm9wZXJseSBlc2NhcGUgTElLRSB3aWxkIGNoYXJhY3RlcnMuCiAtICBGaXhlZCBhIGJ1ZyAoIzgxKSAtIE9EQkMncyBsaXN0X2ZpZWxkcygpIGFuZCBmaWVsZF9kYXRhKCkgbWV0aG9kcyBza2lwcGVkIHRoZSBmaXJzdCBjb2x1bW4gZHVlIHRvIG9kYmNfZmllbGRfKigpIGZ1bmN0aW9ucycgaW5kZXggc3RhcnRpbmcgYXQgMSBpbnN0ZWFkIG9mIDAuCiAtICBGaXhlZCBhIGJ1ZyAoIzEyOSkgLSBPREJDJ3MgbnVtX3Jvd3MoKSByZXR1cm5lZCAtMSBpbiBzb21lIGNhc2VzLCBkdWUgdG8gbm90IGFsbCBzdWJkcml2ZXJzIHN1cHBvcnRpbmcgdGhlIG9kYmNfbnVtX3Jvd3MoKSBmdW5jdGlvbi4KQEAgLTU4NCw3ICs2NDQsNyBAQAogLSAgRml4ZWQgYSBidWcgKCMyMjM5KSAtIDpkb2M6YEVtYWlsIExpYnJhcnkgPGxpYnJhcmllcy9lbWFpbD5gIGltcHJvcGVybHkgaGFuZGxlZCB0aGUgU3ViamVjdCB3aGVuIHVzZWQgd2l0aCBgYGJjY19iYXRjaF9tb2RlYGAgcmVzdWx0aW5nIGluIEVfV0FSTklORyBtZXNzYWdlcyBhbmQgYW4gZW1wdHkgU3ViamVjdC4KIC0gIEZpeGVkIGEgYnVnICgjMjIzNCkgLSA6ZG9jOmBRdWVyeSBCdWlsZGVyIDxkYXRhYmFzZS9xdWVyeV9idWlsZGVyPmAgZGlkbid0IHJlc2V0IEpPSU4gY2FjaGUgZm9yIHdyaXRlLXR5cGUgcXVlcmllcy4KIC0gIEZpeGVkIGEgYnVnICgjMjI5OCkgLSA6ZG9jOmBEYXRhYmFzZSBSZXN1bHRzIDxkYXRhYmFzZS9yZXN1bHRzPmAgbWV0aG9kIGBgbmV4dF9yb3coKWBgIGtlcHQgcmV0dXJuaW5nIHRoZSBsYXN0IHJvdywgYWxsb3dpbmcgZm9yIGluZmluaXRlIGxvb3BzLgotLSAgRml4ZWQgYSBidWcgKCMyMjM2KSAtIDpkb2M6YEZvcm0gSGVscGVyIDxoZWxwZXJzL2Zvcm1faGVscGVyPmAgZnVuY3Rpb24gYGBzZXRfdmFsdWUoKWBgIGRpZG4ndCBwYXJzZSBhcnJheSBub3RhdGlvbiBmb3Iga2V5cyBpZiB0aGUgcnVsZSB3YXMgbm90IHByZXNlbnQgaW4gdGhlIDpkb2M6YEZvcm0gVmFsaWRhdGlvbiBMaWJyYXJ5IDxsaWJyYXJpZXMvZm9ybV92YWxpZGF0aW9uPmAuCistICBGaXhlZCBhIGJ1ZyAoIzIyMzYsICMyNjM5KSAtIDpkb2M6YEZvcm0gSGVscGVyIDxoZWxwZXJzL2Zvcm1faGVscGVyPmAgZnVuY3Rpb25zIDpmdW5jOmBzZXRfdmFsdWUoKWAsIDpmdW5jOmBzZXRfc2VsZWN0KClgLCA6ZnVuYzpgc2V0X3JhZGlvKClgLCA6ZnVuYzpgc2V0X2NoZWNrYm94KClgIGRpZG4ndCBwYXJzZSBhcnJheSBub3RhdGlvbiBmb3Iga2V5cyBpZiB0aGUgcnVsZSB3YXMgbm90IHByZXNlbnQgaW4gdGhlIDpkb2M6YEZvcm0gVmFsaWRhdGlvbiBMaWJyYXJ5IDxsaWJyYXJpZXMvZm9ybV92YWxpZGF0aW9uPmAuCiAtICBGaXhlZCBhIGJ1ZyAoIzIzNTMpIC0gOmRvYzpgUXVlcnkgQnVpbGRlciA8ZGF0YWJhc2UvcXVlcnlfYnVpbGRlcj5gIGVycm9uZW91c2x5IHByZWZpeGVkIGxpdGVyYWwgc3RyaW5ncyB3aXRoICoqZGJwcmVmaXgqKi4KIC0gIEZpeGVkIGEgYnVnICgjNzgpIC0gOmRvYzpgQ2FydCBMaWJyYXJ5IDxsaWJyYXJpZXMvY2FydD5gIGRpZG4ndCBhbGxvdyBub24tRW5nbGlzaCBsZXR0ZXJzIGluIHByb2R1Y3QgbmFtZXMuCiAtICBGaXhlZCBhIGJ1ZyAoIzc3KSAtIDpkb2M6YERhdGFiYXNlIENsYXNzIDxkYXRhYmFzZS9pbmRleD5gIGRpZG4ndCBwcm9wZXJseSBoYW5kbGUgdGhlIHRyYW5zYWN0aW9uICJ0ZXN0IG1vZGUiIGZsYWcuCkBAIC01OTUsNiArNjU1LDMzIEBACiAtICBGaXhlZCBhIGJ1ZyAoIzI0OTApIC0gOmRvYzpgRGF0YWJhc2UgQ2xhc3MgPGRhdGFiYXNlL3F1ZXJpZXM+YCBtZXRob2QgYGBxdWVyeSgpYGAgcmV0dXJuaW5nIGJvb2xlYW4gaW5zdGVhZCBvZiBhIHJlc3VsdCBvYmplY3QgZm9yIFBvc3RncmVTUUwtc3BlY2lmaWMgKklOU0VSVCBJTlRPIC4uLiBSRVRVUk5JTkcqIHN0YXRlbWVudHMuCiAtICBGaXhlZCBhIGJ1ZyAoIzI0OSkgLSA6ZG9jOmBDYWNoZSBMaWJyYXJ5IDxsaWJyYXJpZXMvY2FjaGluZz5gIGRpZG4ndCBwcm9wZXJseSBoYW5kbGUgTWVtY2FjaGUoZCkgY29uZmlndXJhdGlvbnMgd2l0aCBtaXNzaW5nIG9wdGlvbnMuCiAtICBGaXhlZCBhIGJ1ZyAoIzE4MCkgLSA6ZnVuYzpgY29uZmlnX2l0ZW0oKWAgZGlkbid0IHRha2UgaW50byBhY2NvdW50IHJ1bi10aW1lIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KKy0gIEZpeGVkIGEgYnVnICgjMjU1MSkgLSA6ZG9jOmBMb2FkZXIgTGlicmFyeSA8bGlicmFyaWVzL2xvYWRlcj5gIG1ldGhvZCBgYGxpYnJhcnkoKWBgIGRpZG4ndCBwcm9wZXJseSBjaGVjayBpZiBhIGNsYXNzIHRoYXQgaXMgYmVpbmcgbG9hZGVkIGFscmVhZHkgZXhpc3RzLgorLSAgRml4ZWQgYSBidWcgKCMyNTYwKSAtIDpkb2M6YEZvcm0gSGVscGVyIDxoZWxwZXJzL2Zvcm1faGVscGVyPmAgZnVuY3Rpb24gOnBocDpmdW5jOmBmb3JtX29wZW4oKWAgc2V0IHRoZSAnbWV0aG9kPSJwb3N0IicgYXR0cmlidXRlIG9ubHkgaWYgdGhlIHBhc3NlZCBhdHRyaWJ1dGVzIGVxdWFsZWQgYW4gZW1wdHkgc3RyaW5nLgorLSAgRml4ZWQgYSBidWcgKCMyNTg1KSAtIDpkb2M6YFF1ZXJ5IEJ1aWxkZXIgPGRhdGFiYXNlL3F1ZXJ5X2J1aWxkZXI+YCBtZXRob2RzIGBgbWluKClgYCwgYGBtYXgoKWBgLCBgYGF2ZygpYGAsIGBgc3VtKClgYCBkaWRuJ3QgZXNjYXBlIGZpZWxkIG5hbWVzLgorLSAgRml4ZWQgYW4gZWRnZSBjYXNlICgjMjU4MykgaW4gdGhlIDpkb2M6YEVtYWlsIExpYnJhcnkgPGxpYnJhcmllcy9lbWFpbD5gIHdoZXJlIGBTdWhvc2luIDxodHRwOi8vd3d3LmhhcmRlbmVkLXBocC5uZXQvc3Vob3Npbi8+YCBibG9ja2VkIG1lc3NhZ2VzIHNlbnQgdmlhIGBgbWFpbCgpYGAgZHVlIHRvIHRyYWlsaW5nIG5ld3NwYWNlcyBpbiBoZWFkZXJzLgorLSAgRml4ZWQgYSBidWcgKCMyNTkwKSAtIDpwaHA6ZnVuYzpgbG9nX21lc3NhZ2UoKWAgZGlkbid0IGFjdHVhbGx5IGNhY2hlIHRoZSBgYENJX0xvZ2BgIGNsYXNzIGluc3RhbmNlLgorLSAgRml4ZWQgYSBidWcgKCMyNjA5KSAtIDpwaHA6ZnVuYzpgZ2V0X2NvbmZpZygpYCBvcHRpb25hbCBhcmd1bWVudCB3YXMgb25seSBlZmZlY3RpdmUgb24gZmlyc3QgZnVuY3Rpb24gY2FsbC4gQWxzbywgaXQgY2FuIG5vdyBhZGQgaXRlbXMsIGluIGFkZGl0aW9uIHRvIHVwZGF0aW5nIGV4aXN0aW5nIGl0ZW1zLgorLSAgRml4ZWQgYSBidWcgaW4gdGhlICdwb3N0Z3JlJyA6ZG9jOmBkYXRhYmFzZSA8ZGF0YWJhc2UvaW5kZXg+YCBkcml2ZXIgd2hlcmUgdGhlIGNvbm5lY3Rpb24gSUQgd2Fzbid0IHBhc3NlZCB0byBgYHBnX2VzY2FwZV9zdHJpbmcoKWBgLgorLSAgRml4ZWQgYSBidWcgKCMzMykgLSBTY3JpcHQgZXhlY3V0aW9uIHdhcyB0ZXJtaW5hdGVkIHdoZW4gYW4gaW52YWxpZCBjb29raWUga2V5IHdhcyBlbmNvdW50ZXJlZC4KKy0gIEZpeGVkIGEgYnVnICgjMjY4MSkgLSBgYENJX1NlY3VyaXR5OjplbnRpdHlfZGVjb2RlKClgYCB1c2VkIHRoZSBgUFJFR19SRVBMQUNFX0VWQUxgIGZsYWcsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc2luY2UgUEhQIDUuNS4KKy0gIEZpeGVkIGEgYnVnICgjMjY5MSkgLSBuZXN0ZWQgdHJhbnNhY3Rpb25zIGNvdWxkIGVuZCBpbiBhIGRlYWRsb2NrIHdoZW4gYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgd2l0aCAqZGJfZGVidWcqIHNldCB0byBUUlVFLgorLSAgRml4ZWQgYSBidWcgKCMyNTE1KSAtIGBgX2V4Y2VwdGlvbl9oYW5kbGVyKClgYCB1c2VkIHRvIHNlbmQgdGhlIDIwMCAiT0siIEhUVFAgc3RhdHVzIGNvZGUgYW5kIGRpZG4ndCBzdG9wIHNjcmlwdCBleGVjdGlvbiBldmVuIG9uIGZhdGFsIGVycm9ycy4KKy0gIEZpeGVkIGEgYnVnIC0gUmVkaXMgOmRvYzpgQ2FjaGluZyA8bGlicmFyaWVzL2NhY2hpbmc+YCBkcml2ZXIgZGlkbid0IGhhbmRsZSBjb25uZWN0aW9uIGZhaWx1cmVzIHByb3Blcmx5LgorLSAgRml4ZWQgYSBidWcgKCMyNzU2KSAtIDpkb2M6YERhdGFiYXNlIENsYXNzIDxkYXRhYmFzZS9pbmRleD5gIGV4ZWN1dGVkIHRoZSBNeVNRTC1zcGVjaWZpYyBgU0VUIFNFU1NJT04gc3FsX21vZGVgIHF1ZXJ5IGZvciBhbGwgZHJpdmVycyB3aGVuIHRoZSAnc3RyaWN0b24nIG9wdGlvbiBpcyBzZXQuCistICBGaXhlZCBhIGJ1ZyAoIzI1NzkpIC0gOmRvYzpgUXVlcnkgQnVpbGRlciA8ZGF0YWJhc2UvcXVlcnlfYnVpbGRlcj5gICJubyBlc2NhcGUiIGZ1bmN0aW9uYWxpdHkgZGlkbid0IHdvcmsgcHJvcGVybHkgd2l0aCBxdWVyeSBjYWNoZS4KKy0gIEZpeGVkIGEgYnVnICgjMjIzNykgLSA6ZG9jOmBQYXJzZXIgTGlicmFyeSA8bGlicmFyaWVzL3BhcnNlcj5gIGZhaWxlZCBpZiB0aGUgc2FtZSB0YWcgcGFpciBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIHdpdGhpbiBhIHRlbXBsYXRlLgorLSAgRml4ZWQgYSBidWcgKCMyMjY4KSAtIDpkb2M6YFNlY3VyaXR5IExpYnJhcnkgPGxpYnJhcmllcy9zZWN1cml0eT5gIGRpZG4ndCBwcm9wZXJseSBtYXRjaCBKYXZhU2NyaXB0IGV2ZW50cy4KKy0gIEZpeGVkIGEgYnVnICgjMjE0MykgLSA6ZG9jOmBGb3JtIFZhbGlkYXRpb24gTGlicmFyeSA8bGlicmFyaWVzL2Zvcm1fdmFsaWRhdGlvbj5gIGRpZG4ndCBjaGVjayBmb3IgcnVsZSBncm91cHMgbmFtZWQgaW4gYSAqY29udHJvbGxlci9tZXRob2QqIG1hbm5lciB3aGVuIHRyeWluZyB0byBsb2FkIGZyb20gYSBjb25maWcgZmlsZS4KKy0gIEZpeGVkIGEgYnVnICgjMjc2MikgLSA6ZG9jOmBIb29rcyBDbGFzcyA8Z2VuZXJhbC9ob29rcz5gIGRpZG4ndCBwcm9wZXJseSBjaGVjayBpZiB0aGUgY2FsbGVkIGNsYXNzL2Z1bmN0aW9uIGV4aXN0cy4KKy0gIEZpeGVkIGEgYnVnICgjMTQ4KSAtIHdoaWxlIHNhbml0aXppbmcgaW5wdXQgZGF0YSwgYGBDSV9JbnB1dDo6X2NsZWFuX2lucHV0X2RhdGEoKWBgIGFzc3VtZWQgdGhhdCBpdCBpcyBVUkwtZW5jb2RlZCwgc3RyaXBwaW5nIGNlcnRhaW4gY2hhcmFjdGVyIHNlcXVlbmNlcyBmcm9tIGl0LgorLSAgRml4ZWQgYSBidWcgKCMzNDYpIC0gd2l0aCBgYCRjb25maWdbJ2dsb2JhbF94c3NfZmlsdGVyaW5nJ11gYCB0dXJuZWQgb24sIHRoZSBgYCRfR0VUYGAsIGBgJF9QT1NUYGAsIGBgJF9DT09LSUVgYCBhbmQgYGAkX1NFUlZFUmBgIHN1cGVyZ2xvYmFscyB3ZXJlIG92ZXJ3cml0dGVuIGR1cmluZyBpbml0aWFsaXphdGlvbiB0aW1lLCByZXN1bHRpbmcgaW4gWFNTIGZpbHRlcmluZyBiZWluZyBlaXRoZXIgcGVyZm9ybWVkIHR3aWNlIG9yIHRoZXJlIHdhcyBubyBwb3NzaWJsZSB3YXkgdG8gZ2V0IHRoZSBvcmlnaW5hbCBkYXRhLCBldmVuIHRob3VnaCBvcHRpb25zIGZvciB0aGlzIGRvIGV4aXN0LgorLSAgRml4ZWQgYW4gZWRnZSBjYXNlICgjNTU1KSAtIGluY29ycmVjdCBicm93c2VyIHZlcnNpb24gd2FzIHJlcG9ydGVkIGZvciBPcGVyYSAxMCsgZHVlIHRvIGEgbm9uLXN0YW5kYXJkIHVzZXItYWdlbnQgc3RyaW5nLgorLSAgRml4ZWQgYSBidWcgKCMxMzMpIC0gOmRvYzpgVGV4dCBIZWxwZXIgPGhlbHBlcnMvdGV4dF9oZWxwZXI+YCA6ZnVuYzpgYXNjaWlfdG9fZW50aXRpZXMoKWAgc3RyaXBwZWQgdGhlIGxhc3QgY2hhcmFjdGVyIGlmIGl0IGhhcHBlbnMgdG8gYmUgaW4gdGhlIGV4dGVuZGVkIEFTQ0lJIGdyb3VwLgorLSAgRml4ZWQgYSBidWcgKCMyODIyKSAtIGBgZndyaXRlKClgYCB3YXMgdXNlZCBpbmNvcnJlY3RseSB0aHJvdWdob3V0IHRoZSB3aG9sZSBmcmFtZXdvcmssIGFsbG93aW5nIGluY29tcGxldGUgd3JpdGVzIHdoZW4gd3JpdGluZyB0byBhIG5ldHdvcmsgc3RyZWFtIGFuZCBwb3NzaWJseSBhIGZldyBvdGhlciBlZGdlIGNhc2VzLgorLSAgRml4ZWQgYSBidWcgd2hlcmUgOmRvYzpgVXNlciBBZ2VudCBMaWJyYXJ5IDxsaWJyYXJpZXMvdXNlcl9hZ2VudD5gIG1ldGhvZHMgYGBhY2NlcHRfY2hhcnNldCgpYGAgYW5kIGBgYWNjZXB0X2xhbmcoKWBgIGRpZG4ndCBwcm9wZXJseSBwYXJzZSBIVFRQIGhlYWRlcnMgdGhhdCBjb250YWluIHNwYWNlcy4KKy0gIEZpeGVkIGEgYnVnIHdoZXJlICpkZWZhdWx0X2NvbnRyb2xsZXIqIHdhcyBjYWxsZWQgaW5zdGFkIG9mIHRyaWdnZXJpbmcgYSA0MDQgZXJyb3IgaWYgdGhlIGN1cnJlbnQgcm91dGUgaXMgaW4gYSBjb250cm9sbGVyIGRpcmVjdG9yeS4KKy0gIEZpeGVkIGEgYnVnICgjMjczNykgLSA6ZG9jOmBYTUwtUlBDIExpYnJhcnkgPGxpYnJhcmllcy94bWxycGM+YCB1c2VkIG9iamVjdHMgYXMgYXJyYXkga2V5cywgd2hpY2ggdHJpZ2dlcmVkIEVfTk9USUNFIG1lc3NhZ2VzLgorLSAgRml4ZWQgYSBidWcgKCMyNzI5KSAtIGBgQ0lfU2VjdXJ0eTo6X3ZhbGlkYXRlX2VudGl0aWVzKClgYCB1c2VkIG92ZXJseS1pbnRydXNpdmUgYGBwcmVnX3JlcGxhY2UoKWBgIHBhdHRlcm5zIHRoYXQgcHJvZHVjZWQgZmFsc2UtcG9zaXRpdmVzLgogCiBWZXJzaW9uIDIuMS40CiA9PT09PT09PT09PT09CkBAIC03NTEsNyArODM4LDYgQEAKICAgIGJ1dCB0aGUgcmVxdWVzdGVkIG1ldGhvZCBkaWQgbm90LgogLSAgRml4ZWQgYSBidWcgKFJlYWN0b3IgIzg5KSB3aGVyZSBNeVNRTCBleHBvcnQgd291bGQgZmFpbCBpZiB0aGUgdGFibGUKICAgIGhhZCBoeXBoZW5zIG9yIG90aGVyIG5vbiBhbHBoYW51bWVyaWMvdW5kZXJzY29yZSBjaGFyYWN0ZXJzLgotLSAgRml4ZWQgYSBidWcgKCMyMDApIHdoZXJlIE15U1FMIHF1ZXJpZXMgd291bGQgYmUgbWFsZm9ybWVkIGFmdGVyIGNhbGxpbmcgJHRoaXMtPmRiLT5jb3VudF9hbGwoKSB0aGVuICR0aGlzLT5kYi0+Z2V0KCkKIC0gIEZpeGVkIGEgYnVnICgjMTA1KSB0aGF0IHN0b3BwZWQgcXVlcnkgZXJyb3JzIGZyb20gYmVpbmcgbG9nZ2VkIHVubGVzcyBkYXRhYmFzZSBkZWJ1Z2dpbmcgd2FzIGVuYWJsZWQKIC0gIEZpeGVkIGEgYnVnICgjMTYwKSAtIFJlbW92ZWQgdW5uZWVkZWQgYXJyYXkgY29weSBpbiB0aGUgZmlsZSBjYWNoZQogICAgZHJpdmVyLgpAQCAtNzcyLDcgKzg1OCw3IEBACiAtICBGaXhlZCBhIGJ1ZyAoIzUzNykgLSBTdXBwb3J0IGZvciBhbGwgd2F2IHR5cGUgaW4gYnJvd3Nlci4KIC0gIEZpeGVkIGEgYnVnICgjNTc2KSAtIFVzaW5nIGluaV9nZXQoKSBmdW5jdGlvbiB0byBkZXRlY3QgaWYgYXBjIGlzIGVuYWJsZWQgb3Igbm90LgogLSAgRml4ZWQgaW52YWxpZCBkYXRlIHRpbWUgZm9ybWF0IGluIDpkb2M6YERhdGUgaGVscGVyIDxoZWxwZXJzL2RhdGVfaGVscGVyPmAgYW5kIDpkb2M6YFhNTFJQQyBsaWJyYXJ5IDxsaWJyYXJpZXMveG1scnBjPmAuCi0tICBGaXhlZCBhIGJ1ZyAoIzIwMCkgLSBNeVNRTCBxdWVyaWVzIHdvdWxkIGJlIG1hbGZvcm1lZCBhZnRlciBjYWxsaW5nIGNvdW50X2FsbCgpIHRoZW4gZGItPmdldCgpLgorLSAgRml4ZWQgYSBidWcgKCMyMDApIC0gTXlTUUwgcXVlcmllcyB3b3VsZCBiZSBtYWxmb3JtZWQgYWZ0ZXIgY2FsbGluZyBkYi0+Y291bnRfYWxsKCkgdGhlbiBkYi0+Z2V0KCkuCiAKIFZlcnNpb24gMi4wLjMKID09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9kYXRhYmFzZS9oZWxwZXJzLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9kYXRhYmFzZS9oZWxwZXJzLnJzdAppbmRleCBlOGE1YWM4Li43N2JmMWI1IDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZGF0YWJhc2UvaGVscGVycy5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2RhdGFiYXNlL2hlbHBlcnMucnN0CkBAIC0zLDcgKzMsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAkdGhpcy0+ZGItPmluc2VydF9pZCgpCi09PT09PT09PT09PT09PT09PT09PT09PQorPT09PT09PT09PT09PT09PT09PT09PQogCiBUaGUgaW5zZXJ0IElEIG51bWJlciB3aGVuIHBlcmZvcm1pbmcgZGF0YWJhc2UgaW5zZXJ0cy4KIApAQCAtMTIsNyArMTIsNyBAQAogCWFwcHJvcHJpYXRlIHNlcXVlbmNlIHRvIGNoZWNrIGZvciB0aGUgaW5zZXJ0IGlkLgogCiAkdGhpcy0+ZGItPmFmZmVjdGVkX3Jvd3MoKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBEaXNwbGF5cyB0aGUgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MsIHdoZW4gZG9pbmcgIndyaXRlIiB0eXBlIHF1ZXJpZXMKIChpbnNlcnQsIHVwZGF0ZSwgZXRjLikuCkBAIC0yMiw4ICsyMiw4IEBACiAJYWZmZWN0ZWQgcm93cy4gQnkgZGVmYXVsdCB0aGlzIGhhY2sgaXMgZW5hYmxlZCBidXQgaXQgY2FuIGJlIHR1cm5lZCBvZmYKIAlpbiB0aGUgZGF0YWJhc2UgZHJpdmVyIGZpbGUuCiAKLSR0aGlzLT5kYi0+Y291bnRfYWxsKCk7Ci09PT09PT09PT09PT09PT09PT09PT09PT0KKyR0aGlzLT5kYi0+Y291bnRfYWxsKCkKKz09PT09PT09PT09PT09PT09PT09PT0KIAogUGVybWl0cyB5b3UgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIHBhcnRpY3VsYXIgdGFibGUuCiBTdWJtaXQgdGhlIHRhYmxlIG5hbWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlci4gRXhhbXBsZTo6CkBAIC00Nyw4ICs0Nyw4IEBACiAKIAllY2hvICR0aGlzLT5kYi0+dmVyc2lvbigpOwogCi0kdGhpcy0+ZGItPmxhc3RfcXVlcnkoKTsKLT09PT09PT09PT09PT09PT09PT09PT09PT0KKyR0aGlzLT5kYi0+bGFzdF9xdWVyeSgpCis9PT09PT09PT09PT09PT09PT09PT09PQogCiBSZXR1cm5zIHRoZSBsYXN0IHF1ZXJ5IHRoYXQgd2FzIHJ1biAodGhlIHF1ZXJ5IHN0cmluZywgbm90IHRoZSByZXN1bHQpLgogRXhhbXBsZTo6CkBAIC01NywxMSArNTcsMTIgQEAKIAkKIAkvLyBQcm9kdWNlczogIFNFTEVDVCAqIEZST00gc29tZXRhYmxlLi4uLgogCi1UaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgaGVscCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nCi1kYXRhYmFzZSBJTlNFUlRzIGFuZCBVUERBVEVzLgogCi0kdGhpcy0+ZGItPmluc2VydF9zdHJpbmcoKTsKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy4uIG5vdGU6OiBEaXNhYmxpbmcgdGhlICoqc2F2ZV9xdWVyaWVzKiogc2V0dGluZyBpbiB5b3VyIGRhdGFiYXNlCisJY29uZmlndXJhdGlvbiB3aWxsIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHVzZWxlc3MuCisKKyR0aGlzLT5kYi0+aW5zZXJ0X3N0cmluZygpCis9PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBUaGlzIGZ1bmN0aW9uIHNpbXBsaWZpZXMgdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyBkYXRhYmFzZSBpbnNlcnRzLiBJdAogcmV0dXJucyBhIGNvcnJlY3RseSBmb3JtYXR0ZWQgU1FMIGluc2VydCBzdHJpbmcuIEV4YW1wbGU6OgpAQCAtNzcsOCArNzgsOCBAQAogCiAuLiBub3RlOjogVmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IGVzY2FwZWQsIHByb2R1Y2luZyBzYWZlciBxdWVyaWVzLgogCi0kdGhpcy0+ZGItPnVwZGF0ZV9zdHJpbmcoKTsKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyR0aGlzLT5kYi0+dXBkYXRlX3N0cmluZygpCis9PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBUaGlzIGZ1bmN0aW9uIHNpbXBsaWZpZXMgdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyBkYXRhYmFzZSB1cGRhdGVzLiBJdAogcmV0dXJucyBhIGNvcnJlY3RseSBmb3JtYXR0ZWQgU1FMIHVwZGF0ZSBzdHJpbmcuIEV4YW1wbGU6OgpAQCAtOTUsNCArOTYsNCBAQAogCiAJIFVQREFURSB0YWJsZV9uYW1lIFNFVCBuYW1lID0gJ1JpY2snLCBlbWFpbCA9ICdyaWNrQGV4YW1wbGUuY29tJywgdXJsID0gJ2V4YW1wbGUuY29tJyBXSEVSRSBhdXRob3JfaWQgPSAxIEFORCBzdGF0dXMgPSAnYWN0aXZlJwogCi0uLiBub3RlOjogVmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IGVzY2FwZWQsIHByb2R1Y2luZyBzYWZlciBxdWVyaWVzLgorLi4gbm90ZTo6IFZhbHVlcyBhcmUgYXV0b21hdGljYWxseSBlc2NhcGVkLCBwcm9kdWNpbmcgc2FmZXIgcXVlcmllcy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZGF0YWJhc2UvcXVlcnlfYnVpbGRlci5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZGF0YWJhc2UvcXVlcnlfYnVpbGRlci5yc3QKaW5kZXggNjU2MDljMS4uNWJmZGZkYiAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2RhdGFiYXNlL3F1ZXJ5X2J1aWxkZXIucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9kYXRhYmFzZS9xdWVyeV9idWlsZGVyLnJzdApAQCAtNjgsNyArNjgsNyBAQAogCS8vIFByb2R1Y2VzIHN0cmluZzogU0VMRUNUICogRlJPTSBteXRhYmxlCiAKIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIHNldCB3aGV0aGVyIG9yIG5vdCB0aGUgcXVlcnkgYnVpbGRlciBxdWVyeQotd2lsbCBiZSByZXNldCAoYnkgZGVmYXVsdCBpdCB3aWxsIGJlJm1kYXNoO2p1c3QgbGlrZSBgJHRoaXMtPmRiLT5nZXQoKWApOjoKK3dpbGwgYmUgcmVzZXQgKGJ5IGRlZmF1bHQgaXQgd2lsbCBiZSByZXNldCwganVzdCBsaWtlIHdoZW4gdXNpbmcgYCR0aGlzLT5kYi0+Z2V0KClgKTo6CiAKIAllY2hvICR0aGlzLT5kYi0+bGltaXQoMTAsMjApLT5nZXRfY29tcGlsZWRfc2VsZWN0KCdteXRhYmxlJywgRkFMU0UpOwogCS8vIFByb2R1Y2VzIHN0cmluZzogU0VMRUNUICogRlJPTSBteXRhYmxlIExJTUlUIDIwLCAxMApAQCAtNzYsNyArNzYsNyBAQAogCiAJZWNobyAkdGhpcy0+ZGItPnNlbGVjdCgndGl0bGUsIGNvbnRlbnQsIGRhdGUnKS0+Z2V0X2NvbXBpbGVkX3NlbGVjdCgpOwogCi0JLy8gUHJvZHVjZXMgc3RyaW5nOiBTRUxFQ1QgdGl0bGUsIGNvbnRlbnQsIGRhdGUgRlJPTSBteXRhYmxlCisJLy8gUHJvZHVjZXMgc3RyaW5nOiBTRUxFQ1QgdGl0bGUsIGNvbnRlbnQsIGRhdGUgRlJPTSBteXRhYmxlIExJTUlUIDIwLCAxMAogCiBUaGUga2V5IHRoaW5nIHRvIG5vdGljZSBpbiB0aGUgYWJvdmUgZXhhbXBsZSBpcyB0aGF0IHRoZSBzZWNvbmQgcXVlcnkgZGlkIG5vdAogdXRpbGl6ZSBgJHRoaXMtPmRiLT5mcm9tKClgXyBhbmQgZGlkIG5vdCBwYXNzIGEgdGFibGUgbmFtZSBpbnRvIHRoZSBmaXJzdApAQCAtNjY1LDEwICs2NjUsMTIgQEAKIAkvLyBQcm9kdWNlcyBzdHJpbmc6IElOU0VSVCBJTlRPIG15dGFibGUgKHRpdGxlLCBjb250ZW50KSBWQUxVRVMgKCdNeSBUaXRsZScsICdNeSBDb250ZW50JykKIAogVGhlIGtleSB0aGluZyB0byBub3RpY2UgaW4gdGhlIGFib3ZlIGV4YW1wbGUgaXMgdGhhdCB0aGUgc2Vjb25kIHF1ZXJ5IGRpZCBub3QKLXV0bGl6ZSBgJHRoaXMtPmRiLT5mcm9tKClgXyBub3IgZGlkIGl0IHBhc3MgYSB0YWJsZSBuYW1lIGludG8gdGhlIGZpcnN0Cit1dGxpemUgYCR0aGlzLT5kYi0+ZnJvbSgpYCBub3IgZGlkIGl0IHBhc3MgYSB0YWJsZSBuYW1lIGludG8gdGhlIGZpcnN0CiBwYXJhbWV0ZXIuIFRoZSByZWFzb24gdGhpcyB3b3JrZWQgaXMgYmVjYXVzZSB0aGUgcXVlcnkgaGFzIG5vdCBiZWVuIGV4ZWN1dGVkCi11c2luZyBgJHRoaXMtPmRiLT5pbnNlcnQoKWBfIHdoaWNoIHJlc2V0cyB2YWx1ZXMgb3IgcmVzZXQgZGlyZWN0bHkgdXNpbmcKLWAkdGhpcy0+ZGItPnJlc2V0X3F1ZXJ5KClgXy4KK3VzaW5nIGAkdGhpcy0+ZGItPmluc2VydCgpYCB3aGljaCByZXNldHMgdmFsdWVzIG9yIHJlc2V0IGRpcmVjdGx5IHVzaW5nCitgJHRoaXMtPmRiLT5yZXNldF9xdWVyeSgpYC4KKworLi4gbm90ZTo6IFRoaXMgbWV0aG9kIGRvZXNuJ3Qgd29yayBmb3IgYmF0Y2hlZCBpbnNlcnRzLgogCiAkdGhpcy0+ZGItPmluc2VydF9iYXRjaCgpCiA9PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC04ODYsOCArODg4LDkgQEAKIFRoaXMgd29ya3MgZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgYGAkdGhpcy0+ZGItPmdldF9jb21waWxlZF9pbnNlcnQoKWBgIGV4Y2VwdAogdGhhdCBpdCBwcm9kdWNlcyBhbiBVUERBVEUgU1FMIHN0cmluZyBpbnN0ZWFkIG9mIGFuIElOU0VSVCBTUUwgc3RyaW5nLgogCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiB2aWV3IGRvY3VtZW50YXRpb24gZm9yIGAkdGhpcy0+ZGItPmdldF9jb21waWxlZF9pbnNlcnQoKWBfLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlldyBkb2N1bWVudGF0aW9uIGZvciBgJHRoaXMtPmRiLT5nZXRfY29tcGlsZWRfaW5zZXJ0KClgLgogCisuLiBub3RlOjogVGhpcyBtZXRob2QgZG9lc24ndCB3b3JrIGZvciBiYXRjaGVkIHVwZGF0ZXMuCiAKICoqKioqKioqKioqKioKIERlbGV0aW5nIERhdGEKQEAgLTEwNTUsNCArMTA1OCw5IEBACiAJJGRhdGEgPSAkdGhpcy0+ZGItPmdldCgpLT5yZXN1bHRfYXJyYXkoKTsKIAogCS8vIFdvdWxkIGV4ZWN1dGUgYW5kIHJldHVybiBhbiBhcnJheSBvZiByZXN1bHRzIG9mIHRoZSBmb2xsb3dpbmcgcXVlcnk6Ci0JLy8gU0VMRUNUIGZpZWxkMSwgZmllbGQxIGZyb20gbXl0YWJsZSB3aGVyZSBmaWVsZDMgPSA1OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwkvLyBTRUxFQ1QgZmllbGQxLCBmaWVsZDEgZnJvbSBteXRhYmxlIHdoZXJlIGZpZWxkMyA9IDU7CisKKy4uIG5vdGU6OiBEb3VibGUgY2FsbHMgdG8gYGBnZXRfY29tcGlsZWRfc2VsZWN0KClgYCB3aGlsZSB5b3UncmUgdXNpbmcgdGhlCisJUXVlcnkgQnVpbGRlciBDYWNoaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIE5PVCByZXNldHRpbmcgeW91ciBxdWVyaWVzCisJd2lsbCByZXN1bHRzIGluIHRoZSBjYWNoZSBiZWluZyBtZXJnZWQgdHdpY2UuIFRoYXQgaW4gdHVybiB3aWxsCisJaS5lLiBpZiB5b3UncmUgY2FjaGluZyBhIGBgc2VsZWN0KClgYCAtIHNlbGVjdCB0aGUgc2FtZSBmaWVsZCB0d2ljZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9jYWNoaW5nLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NhY2hpbmcucnN0CmluZGV4IDQ4Mzg1ZDYuLmY0OTlmNmUgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NhY2hpbmcucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NhY2hpbmcucnN0CkBAIC00NSw2ICs0NSw5IEBACiAJY2FjaGluZyB3aWxsIG9ubHkgd29yayBpZiB5b3UgYXJlIGdlbmVyYXRpbmcgZGlzcGxheSBmb3IgeW91cgogCWNvbnRyb2xsZXIgd2l0aCBhIDpkb2M6YHZpZXcgPC4vdmlld3M+YC4KIAorLi4gaW1wb3J0YW50OjogSWYgeW91IGNoYW5nZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QKKwl5b3VyIG91dHB1dCwgeW91IGhhdmUgdG8gbWFudWFsbHkgZGVsZXRlIHlvdXIgY2FjaGUgZmlsZXMuCisKIC4uIG5vdGU6OiBCZWZvcmUgdGhlIGNhY2hlIGZpbGVzIGNhbiBiZSB3cml0dGVuIHlvdSBtdXN0IHNldCB0aGUgZmlsZQogCXBlcm1pc3Npb25zIG9uIHlvdXIgKmFwcGxpY2F0aW9uL2NhY2hlLyogZGlyZWN0b3J5IHN1Y2ggdGhhdAogCWl0IGlzIHdyaXRhYmxlLgpkaWZmIC0tZ2l0IGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvY2xpLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NsaS5yc3QKaW5kZXggOTk4ZDJhOS4uNGYzYjA3ZCAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvY2xpLnJzdAorKysgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9jbGkucnN0CkBAIC0yMyw3ICsyMyw3IEBACiAKIC0gIFJ1biB5b3VyIGNyb24tam9icyB3aXRob3V0IG5lZWRpbmcgdG8gdXNlICp3Z2V0KiBvciAqY3VybCoKIC0gIE1ha2UgeW91ciBjcm9uLWpvYnMgaW5hY2Nlc3NpYmxlIGZyb20gYmVpbmcgbG9hZGVkIGluIHRoZSBVUkwgYnkKLSAgIGNoZWNraW5nIGZvciBgYCR0aGlzLT5pbnB1dC0+aXNfY2xpX3JlcXVlc3QoKWBgCisgICBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIDpmdW5jOmBpc19jbGkoKWAuCiAtICBNYWtlIGludGVyYWN0aXZlICJ0YXNrcyIgdGhhdCBjYW4gZG8gdGhpbmdzIGxpa2Ugc2V0IHBlcm1pc3Npb25zLAogICAgcHJ1bmUgY2FjaGUgZm9sZGVycywgcnVuIGJhY2t1cHMsIGV0Yy4KIC0gIEludGVncmF0ZSB3aXRoIG90aGVyIGFwcGxpY2F0aW9ucyBpbiBvdGhlciBsYW5ndWFnZXMuIEZvciBleGFtcGxlLCBhCkBAIC0zMyw3ICszMyw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBMZXQncyBjcmVhdGUgYSBzaW1wbGUgY29udHJvbGxlciBzbyB5b3UgY2FuIHNlZSBpdCBpbiBhY3Rpb24uIFVzaW5nIHlvdXIKLXRleHQgZWRpdG9yLCBjcmVhdGUgYSBmaWxlIGNhbGxlZCB0b29scy5waHAsIGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb2RlCit0ZXh0IGVkaXRvciwgY3JlYXRlIGEgZmlsZSBjYWxsZWQgVG9vbHMucGhwLCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29kZQogaW4gaXQ6OgogCiAJPD9waHAKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NvbW1vbl9mdW5jdGlvbnMucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvY29tbW9uX2Z1bmN0aW9ucy5yc3QKaW5kZXggOGM1MTY2My4uNjVjYTAyNiAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvY29tbW9uX2Z1bmN0aW9ucy5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvY29tbW9uX2Z1bmN0aW9ucy5yc3QKQEAgLTEzLDcgKzEzLDcgQEAKIAogICA8ZGl2IGNsYXNzPSJjdXN0b20taW5kZXggY29udGFpbmVyIj48L2Rpdj4KIAotLi4gZnVuY3Rpb246OiBpc19waHAoJHZlcnNpb24gPSAnNS4zLjAnKQorLi4gZnVuY3Rpb246OiBpc19waHAoWyR2ZXJzaW9uID0gJzUuMy4wJ10pCiAKIAk6cGFyYW0Jc3RyaW5nCSR2ZXJzaW9uOiBWZXJzaW9uIG51bWJlcgogCTpyZXR1cm5zOglib29sCkBAIC02Niw3ICs2Niw3IEBACiAJdG8gcmV0cmlldmUgc2luZ2xlIGtleXMuIFNlZSA6ZG9jOmBDb25maWcgTGlicmFyeSA8Li4vbGlicmFyaWVzL2NvbmZpZz5gCiAJZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAotLi4gOm5vaW5kZXg6IGZ1bmN0aW9uOjogc2hvd19lcnJvcigkbWVzc2FnZSwgJHN0YXR1c19jb2RlLCAkaGVhZGluZyA9ICdBbiBFcnJvciBXYXMgRW5jb3VudGVyZWQnKQorLi4gOm5vaW5kZXg6IGZ1bmN0aW9uOjogc2hvd19lcnJvcigkbWVzc2FnZSwgJHN0YXR1c19jb2RlWywgJGhlYWRpbmcgPSAnQW4gRXJyb3IgV2FzIEVuY291bnRlcmVkJ10pCiAKIAk6cGFyYW0JbWl4ZWQJJG1lc3NhZ2U6IEVycm9yIG1lc3NhZ2UKIAk6cGFyYW0JaW50CSRzdGF0dXNfY29kZTogSFRUUCBSZXNwb25zZSBzdGF0dXMgY29kZQpAQCAtNzYsNyArNzYsNyBAQAogCVRoaXMgZnVuY3Rpb24gY2FsbHMgYGBDSV9FeGNlcHRpb246OnNob3dfZXJyb3IoKWBgLiBGb3IgbW9yZSBpbmZvLAogCXBsZWFzZSBzZWUgdGhlIDpkb2M6YEVycm9yIEhhbmRsaW5nIDxlcnJvcnM+YCBkb2N1bWVudGF0aW9uLgogCi0uLiA6bm9pbmRleDogZnVuY3Rpb246OiBzaG93XzQwNCgkcGFnZSA9ICcnLCAkbG9nX2Vycm9yID0gVFJVRSkKKy4uIDpub2luZGV4OiBmdW5jdGlvbjo6IHNob3dfNDA0KFskcGFnZSA9ICcnWywgJGxvZ19lcnJvciA9IFRSVUVdXSkKIAogCTpwYXJhbQlzdHJpbmcJJHBhZ2U6IFVSSSBzdHJpbmcKIAk6cGFyYW0JYm9vbAkkbG9nX2Vycm9yOiBXaGV0aGVyIHRvIGxvZyB0aGUgZXJyb3IKQEAgLTg1LDE3ICs4NSwxNiBAQAogCVRoaXMgZnVuY3Rpb24gY2FsbHMgYGBDSV9FeGNlcHRpb246OnNob3dfNDA0KClgYC4gRm9yIG1vcmUgaW5mbywKIAlwbGVhc2Ugc2VlIHRoZSA6ZG9jOmBFcnJvciBIYW5kbGluZyA8ZXJyb3JzPmAgZG9jdW1lbnRhdGlvbi4KIAotLi4gOm5vaW5kZXg6IGZ1bmN0aW9uOjogbG9nX21lc3NhZ2UoJGxldmVsLCAkbWVzc2FnZSwgJHBocF9lcnJvciA9IEZBTFNFKQorLi4gOm5vaW5kZXg6IGZ1bmN0aW9uOjogbG9nX21lc3NhZ2UoJGxldmVsLCAkbWVzc2FnZSkKIAogCTpwYXJhbQlzdHJpbmcJJGxldmVsOiBMb2cgbGV2ZWw6ICdlcnJvcicsICdkZWJ1Zycgb3IgJ2luZm8nCiAJOnBhcmFtCXN0cmluZwkkbWVzc2FnZTogTWVzc2FnZSB0byBsb2cKLQk6cGFyYW0JYm9vbAkkcGhwX2Vycm9yOiBXaGV0aGVyIHdlJ3JlIGxvZ2dpbmcgYSBuYXRpdmUgUEhQIGVycm9yIG1lc3NhZ2UKIAk6cmV0dXJuczoJdm9pZAogCiAJVGhpcyBmdW5jdGlvbiBpcyBhbiBhbGlhcyBmb3IgYGBDSV9Mb2c6OndyaXRlX2xvZygpYGAuIEZvciBtb3JlIGluZm8sCiAJcGxlYXNlIHNlZSB0aGUgOmRvYzpgRXJyb3IgSGFuZGxpbmcgPGVycm9ycz5gIGRvY3VtZW50YXRpb24uCiAKLS4uIGZ1bmN0aW9uOjogc2V0X3N0YXR1c19oZWFkZXIoJGNvZGUsICR0ZXh0ID0gJycpCisuLiBmdW5jdGlvbjo6IHNldF9zdGF0dXNfaGVhZGVyKCRjb2RlWywgJHRleHQgPSAnJ10pCiAKIAk6cGFyYW0JaW50CSRjb2RlOiBIVFRQIFJlcG9uc2Ugc3RhdHVzIGNvZGUKIAk6cGFyYW0Jc3RyaW5nCSR0ZXh0OiBBIGN1c3RvbSBtZXNzYWdlIHRvIHNldCB3aXRoIHRoZSBzdGF0dXMgY29kZQpAQCAtMTA5LDcgKzEwOCw3IEBACiAJYFNlZSBoZXJlIDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWw+YF8gZm9yCiAJYSBmdWxsIGxpc3Qgb2YgaGVhZGVycy4KIAotLi4gZnVuY3Rpb246OiByZW1vdmVfaW52aXNpYmxlX2NoYXJhY3RlcnMoJHN0ciwgJHVybF9lbmNvZGVkID0gVFJVRSkKKy4uIGZ1bmN0aW9uOjogcmVtb3ZlX2ludmlzaWJsZV9jaGFyYWN0ZXJzKCRzdHJbLCAkdXJsX2VuY29kZWQgPSBUUlVFXSkKIAogCTpwYXJhbQlzdHJpbmcJJHN0cjogSW5wdXQgc3RyaW5nCiAJOnBhcmFtCWJvb2wJJHVybF9lbmNvZGVkOiBXaGV0aGVyIHRvIHJlbW92ZSBVUkwtZW5jb2RlZCBjaGFyYWN0ZXJzIGFzIHdlbGwKQEAgLTE0Nyw4ICsxNDYsMTUgQEAKIAlSZXR1cm5zIFRSVUUgaWYgYSBzZWN1cmUgKEhUVFBTKSBjb25uZWN0aW9uIGlzIHVzZWQgYW5kIEZBTFNFCiAJaW4gYW55IG90aGVyIGNhc2UgKGluY2x1ZGluZyBub24tSFRUUCByZXF1ZXN0cykuCiAKLWZ1bmN0aW9uX3VzYWJsZSgpCi09PT09PT09PT09PT09PT09PQorLi4gZnVuY3Rpb246OiBpc19jbGkoKQorCisJOnJldHVybnM6CWJvb2wKKworCVJldHVybnMgVFJVRSBpZiB0aGUgYXBwbGljYXRpb24gaXMgcnVuIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZQorCWFuZCBGQUxTRSBpZiBub3QuCisKKwkuLiBub3RlOjogVGhpcyBmdW5jdGlvbiBjaGVja3MgYm90aCBpZiB0aGUgYGBQSFBfU0FQSWBgIHZhbHVlIGlzICdjbGknCisJCW9yIGlmIHRoZSBgYFNURElOYGAgY29uc3RhbnQgaXMgZGVmaW5lZC4KIAogLi4gZnVuY3Rpb246OiBmdW5jdGlvbl91c2FibGUoJGZ1bmN0aW9uX25hbWUpCiAKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NvbnRyb2xsZXJzLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NvbnRyb2xsZXJzLnJzdAppbmRleCAwNGYyMzI3Li5kOGVmODI0IDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9jb250cm9sbGVycy5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvY29udHJvbGxlcnMucnN0CkBAIC0xOCw3ICsxOCw3IEBACiAJZXhhbXBsZS5jb20vaW5kZXgucGhwL2Jsb2cvCiAKIEluIHRoZSBhYm92ZSBleGFtcGxlLCBDb2RlSWduaXRlciB3b3VsZCBhdHRlbXB0IHRvIGZpbmQgYSBjb250cm9sbGVyCi1uYW1lZCBibG9nLnBocCBhbmQgbG9hZCBpdC4KK25hbWVkIEJsb2cucGhwIGFuZCBsb2FkIGl0LgogCiAqKldoZW4gYSBjb250cm9sbGVyJ3MgbmFtZSBtYXRjaGVzIHRoZSBmaXJzdCBzZWdtZW50IG9mIGEgVVJJLCBpdCB3aWxsCiBiZSBsb2FkZWQuKioKQEAgLTI3LDcgKzI3LDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIExldCdzIGNyZWF0ZSBhIHNpbXBsZSBjb250cm9sbGVyIHNvIHlvdSBjYW4gc2VlIGl0IGluIGFjdGlvbi4gVXNpbmcgeW91cgotdGV4dCBlZGl0b3IsIGNyZWF0ZSBhIGZpbGUgY2FsbGVkIGJsb2cucGhwLCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29kZQordGV4dCBlZGl0b3IsIGNyZWF0ZSBhIGZpbGUgY2FsbGVkIEJsb2cucGhwLCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29kZQogaW4gaXQ6OgogCiAJPD9waHAKQEAgLTQxLDYgKzQxLDggQEAKIAogVGhlbiBzYXZlIHRoZSBmaWxlIHRvIHlvdXIgKmFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzLyogZGlyZWN0b3J5LgogCisuLiBpbXBvcnRhbnQ6OiBUaGUgZmlsZSBtdXN0IGJlIGNhbGxlZCAnQmxvZy5waHAnLCB3aXRoIGEgY2FwaXRhbCAnQicuCisKIE5vdyB2aXNpdCB0aGUgeW91ciBzaXRlIHVzaW5nIGEgVVJMIHNpbWlsYXIgdG8gdGhpczo6CiAKIAlleGFtcGxlLmNvbS9pbmRleC5waHAvYmxvZy8KQEAgLTEzNiw3ICsxMzgsNyBAQAogVG8gc3BlY2lmeSBhIGRlZmF1bHQgY29udHJvbGxlciwgb3BlbiB5b3VyICoqYXBwbGljYXRpb24vY29uZmlnL3JvdXRlcy5waHAqKgogZmlsZSBhbmQgc2V0IHRoaXMgdmFyaWFibGU6OgogCi0JJHJvdXRlWydkZWZhdWx0X2NvbnRyb2xsZXInXSA9ICdibG9nJzsKKwkkcm91dGVbJ2RlZmF1bHRfY29udHJvbGxlciddID0gJ0Jsb2cnOwogCiBXaGVyZSBCbG9nIGlzIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIGNsYXNzIHlvdSB3YW50IHVzZWQuIElmIHlvdSBub3cKIGxvYWQgeW91ciBtYWluIGluZGV4LnBocCBmaWxlIHdpdGhvdXQgc3BlY2lmeWluZyBhbnkgVVJJIHNlZ21lbnRzIHlvdSdsbApAQCAtMjcyLDcgKzI3NCw3IEBACiAJc3BlY2lmeSB0aGUgZm9sZGVyLiBGb3IgZXhhbXBsZSwgbGV0J3Mgc2F5IHlvdSBoYXZlIGEgY29udHJvbGxlciBsb2NhdGVkCiAJaGVyZTo6CiAKLQkJYXBwbGljYXRpb24vY29udHJvbGxlcnMvcHJvZHVjdHMvc2hvZXMucGhwCisJCWFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL3Byb2R1Y3RzL1Nob2VzLnBocAogCiAJVG8gY2FsbCB0aGUgYWJvdmUgY29udHJvbGxlciB5b3VyIFVSSSB3aWxsIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczo6CiAKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NyZWF0aW5nX2xpYnJhcmllcy5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9jcmVhdGluZ19saWJyYXJpZXMucnN0CmluZGV4IDRmYzhlZDcuLjRiZWI2MDAgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2NyZWF0aW5nX2xpYnJhcmllcy5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvY3JlYXRpbmdfbGlicmFyaWVzLnJzdApAQCAtNDIsOCArNDIsNyBAQAogVGhlIENsYXNzIEZpbGUKID09PT09PT09PT09PT09CiAKLUNsYXNzZXMgc2hvdWxkIGhhdmUgdGhpcyBiYXNpYyBwcm90b3R5cGUgKE5vdGU6IFdlIGFyZSB1c2luZyB0aGUgbmFtZQotU29tZWNsYXNzIHB1cmVseSBhcyBhbiBleGFtcGxlKTo6CitDbGFzc2VzIHNob3VsZCBoYXZlIHRoaXMgYmFzaWMgcHJvdG90eXBlOjoKIAogCTw/cGhwIGlmICggISBkZWZpbmVkKCdCQVNFUEFUSCcpKSBleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7IAogCkBAIC01Niw2ICs1NSw4IEBACiAKIAkvKiBFbmQgb2YgZmlsZSBTb21lY2xhc3MucGhwICovCiAKKy4uIG5vdGU6OiBXZSBhcmUgdXNpbmcgdGhlIG5hbWUgU29tZWNsYXNzIHB1cmVseSBhcyBhbiBleGFtcGxlLgorCiBVc2luZyBZb3VyIENsYXNzCiA9PT09PT09PT09PT09PT09CiAKQEAgLTgxLDcgKzgyLDcgQEAKIAogCSRwYXJhbXMgPSBhcnJheSgndHlwZScgPT4gJ2xhcmdlJywgJ2NvbG9yJyA9PiAncmVkJyk7CiAKLQkkdGhpcy0+bG9hZC0+bGlicmFyeSgnU29tZWNsYXNzJywgJHBhcmFtcyk7CisJJHRoaXMtPmxvYWQtPmxpYnJhcnkoJ3NvbWVjbGFzcycsICRwYXJhbXMpOwogCiBJZiB5b3UgdXNlIHRoaXMgZmVhdHVyZSB5b3UgbXVzdCBzZXQgdXAgeW91ciBjbGFzcyBjb25zdHJ1Y3RvciB0byBleHBlY3QKIGRhdGE6OgpkaWZmIC0tZ2l0IGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvbGlicmFyaWVzLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL2xpYnJhcmllcy5yc3QKaW5kZXggNmUxYzhiNi4uOWJiZGE1MSAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvbGlicmFyaWVzLnJzdAorKysgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9saWJyYXJpZXMucnN0CkBAIC0yOSw0ICsyOSw0IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogUGxlYXNlIHJlYWQgdGhlIHNlY3Rpb24gb2YgdGhlIHVzZXIgZ3VpZGUgdGhhdCBkaXNjdXNzZXMgaG93IHRvCi06ZG9jOmBjcmVhdGUgeW91ciBvd24gbGlicmFyaWVzIDxjcmVhdGluZ19saWJyYXJpZXM+YC4KKzpkb2M6YGNyZWF0ZSB5b3VyIG93biBsaWJyYXJpZXMgPGNyZWF0aW5nX2xpYnJhcmllcz5gLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL21vZGVscy5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9tb2RlbHMucnN0CmluZGV4IGEwMjhhOTUuLmM0ZmQxMjQgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL21vZGVscy5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvbW9kZWxzLnJzdApAQCAtODQsOCArODQsNyBAQAogdGhlIGZpcnN0IGxldHRlciBjYXBpdGFsaXplZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBuYW1lIGxvd2VyY2FzZS4gTWFrZQogc3VyZSB5b3VyIGNsYXNzIGV4dGVuZHMgdGhlIGJhc2UgTW9kZWwgY2xhc3MuCiAKLVRoZSBmaWxlIG5hbWUgd2lsbCBiZSBhIGxvd2VyIGNhc2UgdmVyc2lvbiBvZiB5b3VyIGNsYXNzIG5hbWUuIEZvcgotZXhhbXBsZSwgaWYgeW91ciBjbGFzcyBpcyB0aGlzOjoKK1RoZSBmaWxlIG5hbWUgbXVzdCBtYXRjaCB0aGUgY2xhc3MgbmFtZS4gRm9yIGV4YW1wbGUsIGlmIHRoaXMgaXMgeW91ciBjbGFzczo6CiAKIAljbGFzcyBVc2VyX21vZGVsIGV4dGVuZHMgQ0lfTW9kZWwgewogCkBAIC05OCw3ICs5Nyw3IEBACiAKIFlvdXIgZmlsZSB3aWxsIGJlIHRoaXM6OgogCi0JYXBwbGljYXRpb24vbW9kZWxzL3VzZXJfbW9kZWwucGhwCisJYXBwbGljYXRpb24vbW9kZWxzL1VzZXJfbW9kZWwucGhwCiAKIExvYWRpbmcgYSBNb2RlbAogPT09PT09PT09PT09PT09CkBAIC0xMTEsNyArMTEwLDcgQEAKIAogSWYgeW91ciBtb2RlbCBpcyBsb2NhdGVkIGluIGEgc3ViLWRpcmVjdG9yeSwgaW5jbHVkZSB0aGUgcmVsYXRpdmUgcGF0aAogZnJvbSB5b3VyIG1vZGVscyBkaXJlY3RvcnkuIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIG1vZGVsIGxvY2F0ZWQgYXQKLSphcHBsaWNhdGlvbi9tb2RlbHMvYmxvZy9xdWVyaWVzLnBocCogeW91J2xsIGxvYWQgaXQgdXNpbmc6OgorKmFwcGxpY2F0aW9uL21vZGVscy9ibG9nL1F1ZXJpZXMucGhwKiB5b3UnbGwgbG9hZCBpdCB1c2luZzo6CiAKIAkkdGhpcy0+bG9hZC0+bW9kZWwoJ2Jsb2cvcXVlcmllcycpOwogCkBAIC0xODEsNCArMTgwLDQgQEAKIAkkY29uZmlnWydwY29ubmVjdCddID0gRkFMU0U7CiAJJGNvbmZpZ1snZGJfZGVidWcnXSA9IFRSVUU7CiAKLQkkdGhpcy0+bG9hZC0+bW9kZWwoJ01vZGVsX25hbWUnLCAnJywgJGNvbmZpZyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCSR0aGlzLT5sb2FkLT5tb2RlbCgnbW9kZWxfbmFtZScsICcnLCAkY29uZmlnKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9wcm9maWxpbmcucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvcHJvZmlsaW5nLnJzdAppbmRleCA2ZGJkMGJlLi5mMjlhZjgxIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9wcm9maWxpbmcucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL3Byb2ZpbGluZy5yc3QKQEAgLTgwLDQgKzgwLDggQEAKICoqc2Vzc2lvbl9kYXRhKiogICAgICAgIERhdGEgc3RvcmVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRQogKipxdWVyeV90b2dnbGVfY291bnQqKiAgVGhlIG51bWJlciBvZiBxdWVyaWVzIGFmdGVyIHdoaWNoIHRoZSBxdWVyeSBibG9jayB3aWxsIGRlZmF1bHQgdG8gICAyNQogICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuLgotPT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT0KKworLi4gbm90ZTo6IERpc2FibGluZyB0aGUgKipzYXZlX3F1ZXJpZXMqKiBzZXR0aW5nIGluIHlvdXIgZGF0YWJhc2UgY29uZmlndXJhdGlvbgorCXdpbGwgYWxzbyBlZmZlY3RpdmVseSBkaXNhYmxlIHByb2ZpbGluZyBmb3IgZGF0YWJhc2UgcXVlcmllcyBhbmQgcmVuZGVyCisJdGhlICdxdWVyaWVzJyBzZXR0aW5nIGFib3ZlIHVzZWxlc3MuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvcm91dGluZy5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9yb3V0aW5nLnJzdAppbmRleCA1NTIwZjU5Li4wYjkxZDNmIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9yb3V0aW5nLnJzdAorKysgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9yb3V0aW5nLnJzdApAQCAtMTQyLDYgKzE0MiwyOSBAQAogCQlyZXR1cm4gJ2NhdGFsb2cvcHJvZHVjdF9lZGl0LycgLiBzdHJ0b2xvd2VyKCRwcm9kdWN0X3R5cGUpIC4gJy8nIC4gJGlkOwogCX07CiAKK1VzaW5nIEhUVFAgdmVyYnMgaW4gcm91dGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJdCBpcyBwb3NzaWJsZSB0byB1c2UgSFRUUCB2ZXJicyAocmVxdWVzdCBtZXRob2QpIHRvIGRlZmluZSB5b3VyIHJvdXRpbmcgcnVsZXMuCitUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiBidWlsZGluZyBSRVNUZnVsIGFwcGxpY2F0aW9ucy4gWW91IGNhbiB1c2Ugc3RhbmRhcmQgSFRUUAordmVyYnMgKEdFVCwgUFVULCBQT1NULCBERUxFVEUsIFBBVENIKSBvciBhIGN1c3RvbSBvbmUgc3VjaCAoZS5nLiBQVVJHRSkuIEhUVFAgdmVyYiBydWxlcworYXJlIGNhc2UtaW5zZW5zaXRpdmUuIEFsbCB5b3UgbmVlZCB0byBkbyBpcyB0byBhZGQgdGhlIHZlcmIgYXMgYW4gYXJyYXkga2V5IHRvIHlvdXIgcm91dGUuCitFeGFtcGxlOjoKKworCSRyb3V0ZVsncHJvZHVjdHMnXVsncHV0J10gPSAncHJvZHVjdC9pbnNlcnQnOworCitJbiB0aGUgYWJvdmUgZXhhbXBsZSwgYSBQVVQgcmVxdWVzdCB0byBVUkkgInByb2R1Y3RzIiB3b3VsZCBjYWxsIHRoZSBgYFByb2R1Y3Q6Omluc2VydCgpYGAKK2NvbnRyb2xsZXIgbWV0aG9kLgorCis6OgorCisJJHJvdXRlWydwcm9kdWN0cy8oOm51bSknXVsnREVMRVRFJ10gPSAncHJvZHVjdC9kZWxldGUvJDEnOworCitBIERFTEVURSByZXF1ZXN0IHRvIFVSTCB3aXRoICJwcm9kdWN0cyIgYXMgZmlyc3QgdGhlIHNlZ21lbnQgYW5kIGEgbnVtYmVyIGluIHRoZSBzZWNvbmQgd2lsbCBiZQorbWFwcGVkIHRvIHRoZSBgYFByb2R1Y3Q6OmRlbGV0ZSgpYGAgbWV0aG9kLCBwYXNzaW5nIHRoZSBudW1lcmljIHZhbHVlIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisKK1VzaW5nIEhUVFAgdmVyYnMgaXMgb2YgY291cnNlLCBvcHRpb25hbC4KKwogUmVzZXJ2ZWQgUm91dGVzCiA9PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvc3R5bGVndWlkZS5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9zdHlsZWd1aWRlLnJzdAppbmRleCAxNDRiMzYyLi41NjEzZWFiIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9zdHlsZWd1aWRlLnJzdAorKysgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC9zdHlsZWd1aWRlLnJzdApAQCAtNzEsMTMgKzcxLDQyIEBACiAKIAllY2hvICJIZXJlJ3MgbXkgY29kZSEiOwogCi0JLyogRW5kIG9mIGZpbGUgbXlmaWxlLnBocCAqLworCS8qIEVuZCBvZiBmaWxlIE15ZmlsZS5waHAgKi8KIAkvKiBMb2NhdGlvbjogLi9zeXN0ZW0vbW9kdWxlcy9teW1vZHVsZS9teWZpbGUucGhwICovCiAKIC4uIG5vdGU6OiBUaGVyZSBzaG91bGQgYmUgbm8gZW1wdHkgbGluZSBvciBuZXdsaW5lIGNoYXJhY3RlcihzKSBmb2xsb3dpbmcKIAl0aGUgY2xvc2luZyBjb21tZW50cy4gSWYgeW91IGhhcHBlbiB0byBzZWUgb25lIHdoZW4KIAlzdWJtaXR0aW5nIGEgcHVsbCByZXF1ZXN0LCBwbGVhc2UgY2hlY2sgeW91ciBJREUgc2V0dGluZ3MgYW5kIGZpeCBpdC4KIAorRmlsZSBOYW1pbmcKKz09PT09PT09PT09CisKK0NsYXNzIGZpbGVzIG11c3QgYmUgbmFtZWQgaW4gYSBVY2ZpcnN0LWxpa2UgbWFubmVyLCB3aGlsZSBhbnkgb3RoZXIgZmlsZSBuYW1lCisoY29uZmlndXJhdGlvbnMsIHZpZXdzLCBnZW5lcmljIHNjcmlwdHMsIGV0Yy4pIHNob3VsZCBiZSBpbiBhbGwgbG93ZXJjYXNlLgorCisqKklOQ09SUkVDVCoqOjoKKworCXNvbWVsaWJyYXJ5LnBocAorCXNvbWVMaWJyYXJ5LnBocAorCVNPTUVMSUJSQVJZLnBocAorCVNvbWVfTGlicmFyeS5waHAKKworCUFwcGxpY2F0aW9uX2NvbmZpZy5waHAKKwlBcHBsaWNhdGlvbl9Db25maWcucGhwCisJYXBwbGljYXRpb25Db25maWcucGhwCisKKyoqQ09SUkVDVCoqOjoKKworCVNvbWVsaWJyYXJ5LnBocAorCVNvbWVfbGlicmFyeS5waHAKKworCWFwcGxpY2F0aW9uY29uZmlnLnBocAorCWFwcGxpY2F0aW9uX2NvbmZpZy5waHAKKworRnVydGhlcm1vcmUsIGNsYXNzIGZpbGUgbmFtZXMgc2hvdWxkIG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpdHNlbGYuCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBjbGFzcyBuYW1lZCBgTXljbGFzc2AsIHRoZW4gaXRzIGZpbGVuYW1lIG11c3QKK2JlICoqTXljbGFzcy5waHAqKi4KKwogQ2xhc3MgYW5kIE1ldGhvZCBOYW1pbmcKID09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL3ZpZXdzLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9nZW5lcmFsL3ZpZXdzLnJzdAppbmRleCA0YjFhYjNjLi4yZmMwY2IyIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvZ2VuZXJhbC92aWV3cy5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2dlbmVyYWwvdmlld3MucnN0CkBAIC00NSw3ICs0NSw3IEBACiAuLiBub3RlOjogVGhlIC5waHAgZmlsZSBleHRlbnNpb24gZG9lcyBub3QgbmVlZCB0byBiZSBzcGVjaWZpZWQKIAl1bmxlc3MgeW91IHVzZSBzb21ldGhpbmcgb3RoZXIgdGhhbiAucGhwLgogCi1Ob3csIG9wZW4gdGhlIGNvbnRyb2xsZXIgZmlsZSB5b3UgbWFkZSBlYXJsaWVyIGNhbGxlZCBibG9nLnBocCwgYW5kCitOb3csIG9wZW4gdGhlIGNvbnRyb2xsZXIgZmlsZSB5b3UgbWFkZSBlYXJsaWVyIGNhbGxlZCBCbG9nLnBocCwgYW5kCiByZXBsYWNlIHRoZSBlY2hvIHN0YXRlbWVudCB3aXRoIHRoZSB2aWV3IGxvYWRpbmcgbWV0aG9kOjoKIAogCTw/cGhwCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvaGVscGVycy9mb3JtX2hlbHBlci5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvaGVscGVycy9mb3JtX2hlbHBlci5yc3QKaW5kZXggOGFkOGY3ZC4uZGNiNWJlZSAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2hlbHBlcnMvZm9ybV9oZWxwZXIucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9oZWxwZXJzL2Zvcm1faGVscGVyLnJzdApAQCAtMjgsNyArMjgsNyBAQAogLi4gZnVuY3Rpb246OiBmb3JtX29wZW4oWyRhY3Rpb24gPSAnJ1ssICRhdHRyaWJ1dGVzID0gJydbLCAkaGlkZGVuID0gYXJyYXkoKV1dXSkKIAogCTpwYXJhbQlzdHJpbmcJJGFjdGlvbjogRm9ybSBhY3Rpb24vdGFyZ2V0IFVSSSBzdHJpbmcKLQk6cGFyYW0Jc3RyaW5nCSRhdHRyaWJ1dGVzOiBIVE1MIGF0dHJpYnV0ZXMKKwk6cGFyYW0JYXJyYXkJJGF0dHJpYnV0ZXM6IEhUTUwgYXR0cmlidXRlcwogCTpwYXJhbQlhcnJheQkkaGlkZGVuOiBBbiBhcnJheSBvZiBoaWRkZW4gZmllbGRzJyBkZWZpbml0aW9ucwogCTpyZXR1cm5zOglzdHJpbmcKIApAQCAtODUsNyArODUsNyBAQAogLi4gZnVuY3Rpb246OiBmb3JtX29wZW5fbXVsdGlwYXJ0KFskYWN0aW9uID0gJydbLCAkYXR0cmlidXRlcyA9IGFycmF5KClbLCAkaGlkZGVuID0gYXJyYXkoKV1dKQogCiAJOnBhcmFtCXN0cmluZwkkYWN0aW9uOiBGb3JtIGFjdGlvbi90YXJnZXQgVVJJIHN0cmluZwotCTpwYXJhbQlzdHJpbmcJJGF0dHJpYnV0ZXM6IEhUTUwgYXR0cmlidXRlcworCTpwYXJhbQlhcnJheQkkYXR0cmlidXRlczogSFRNTCBhdHRyaWJ1dGVzCiAJOnBhcmFtCWFycmF5CSRoaWRkZW46IEFuIGFycmF5IG9mIGhpZGRlbiBmaWVsZHMnIGRlZmluaXRpb25zCiAJOnJldHVybnM6CXN0cmluZwogCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvaGVscGVycy9zbWlsZXlfaGVscGVyLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9oZWxwZXJzL3NtaWxleV9oZWxwZXIucnN0CmluZGV4IDA2MDFmMDIuLjA3N2M1NmEgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9oZWxwZXJzL3NtaWxleV9oZWxwZXIucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9oZWxwZXJzL3NtaWxleV9oZWxwZXIucnN0CkBAIC0xNTgsOCArMTU4LDcgQEAKIAlFeGFtcGxlOjoKIAogCQkkc3RyID0gJ0hlcmUgYXJlIHNvbWUgc21pbGV5czogOi0pICA7LSknOwotCQkkc3RyID0gcGFyc2Vfc21pbGV5cygkc3RyLCAiaHR0cDovL2V4YW1wbGUuY29tL2ltYWdlcy9zbWlsZXlzLyIpOworCQkkc3RyID0gcGFyc2Vfc21pbGV5cygkc3RyLCAnaHR0cDovL2V4YW1wbGUuY29tL2ltYWdlcy9zbWlsZXlzLycpOwogCQllY2hvICRzdHI7CiAKLQogLi4gfHNtaWxlIXwgaW1hZ2U6OiAuLi9pbWFnZXMvc21pbGUuZ2lmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2luc3RhbGxhdGlvbi9kb3dubG9hZHMucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2luc3RhbGxhdGlvbi9kb3dubG9hZHMucnN0CmluZGV4IDhkNDdiYTMuLjkzYzVjYzIgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9pbnN0YWxsYXRpb24vZG93bmxvYWRzLnJzdAorKysgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvaW5zdGFsbGF0aW9uL2Rvd25sb2Fkcy5yc3QKQEAgLTMsMzUgKzMsMzcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIC0gIGBDb2RlSWduaXRlciB2My4wLjAgKEN1cnJlbnQgdmVyc2lvbikgPGh0dHA6Ly9lbGxpc2xhYi5jb20vY29kZWlnbml0ZXIvZG93bmxvYWQ+YF8KLS0gIGBDb2RlSWduaXRlciB2Mi4xLjQgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMi4xLjQuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjIuMS4zIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzIuMS4zLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYyLjEuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8yLjEuMi56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2Mi4xLjEgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMi4xLjEuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjIuMS4wIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzIuMS4wLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYyLjAuMyA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8yLjAuMy56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2Mi4wLjIgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMi4wLjIuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjIuMC4xIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzIuMC4xLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYyLjAuMCA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8yLjAuMC56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2MS43LjMgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS43LjMuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuNy4yIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNy4yLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYxLjcuMSA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjcuMS56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2MS43LjAgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS43LjAuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuNi4zIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNi4zLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYxLjYuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjYuMi56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2MS42LjEgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS42LjEuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuNi4wIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNi4wLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYxLjUuNCA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjUuNC56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2MS41LjMgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS41LjMuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuNS4yIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNS4yLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYxLjUuMSA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjUuMS56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2MS40LjEgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS40LjEuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuMy4zIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuMy4zLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYxLjMuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjMuMi56aXA+YF8KLS0gIGBDb2RlSWduaXRlciB2MS4zLjEgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS4zLjEuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuMyA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjMuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjIuemlwPmBfCi0tICBgQ29kZUlnbml0ZXIgdjEuMSA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjFiLnppcD5gXwotLSAgYENvZGVJZ25pdGVyIHYxLjAgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS4wYi56aXA+YF8KKy0gIGBDb2RlSWduaXRlciB2Mi4xLjQgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMi4xLjQuemlwPmBfIChNRDUgQ2hlY2tzdW06IGU3NGEyOTZjMWQ0MTJhODU1YzAyNWI5Y2Q0NjhhNTEzKQorLSAgYENvZGVJZ25pdGVyIHYyLjEuMyA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8yLjEuMy56aXA+YF8gKE1ENSBDaGVja3N1bTogNzgxZDA2YmUwNmVhYTM2ZjEwNzU5ZWY4MmM4NTk0ZDUpCistICBgQ29kZUlnbml0ZXIgdjIuMS4yIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzIuMS4yLnppcD5gXyAoTUQ1IENoZWNrc3VtOiBjN2EyOTgwZGZmMjc3NGM5N2JkMzhiZmJmNDUwZDhkNSkKKy0gIGBDb2RlSWduaXRlciB2Mi4xLjEgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMi4xLjEuemlwPmBfIChNRDUgQ2hlY2tzdW06IGM0YWE1ZjE4OGY0ZmYxNmY5MTk2MDdiNDZhMTZjNzZjKQorLSAgYENvZGVJZ25pdGVyIHYyLjEuMCA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8yLjEuMC56aXA+YF8gKE1ENSBDaGVja3N1bTogOGNiNjc2YjBmODMxMTE0OTM1ZDdkZDFhZTJlMGQ0OTApCistICBgQ29kZUlnbml0ZXIgdjIuMC4zIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzIuMC4zLnppcD5gXyAoTUQ1IENoZWNrc3VtOiA5MTA0NzVkNTBkYWYwODhiZGQ5NDljM2QzNWI0NDRkOSkKKy0gIGBDb2RlSWduaXRlciB2Mi4wLjIgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMi4wLjIuemlwPmBfIChNRDUgQ2hlY2tzdW06IGU3NWJhYjhjZjI3ZDJmYjI0ODNjNWJiNjFiODVhNTI0KQorLSAgYENvZGVJZ25pdGVyIHYyLjAuMSA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8yLjAuMS56aXA+YF8gKE1ENSBDaGVja3N1bTogNjc1YWE5NTg5NmJmYjE2NDY3NDM2YzA0ODRmMTVmMWYpCistICBgQ29kZUlnbml0ZXIgdjIuMC4wIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzIuMC4wLnppcD5gXyAoTUQ1IENoZWNrc3VtOiBiZDY1Nzg2M2RlNDVkYmIzOTdmM2IzZGJjNGYxM2FiYikKKy0gIGBDb2RlSWduaXRlciB2MS43LjMgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS43LjMuemlwPmBfIChNRDUgQ2hlY2tzdW06IDE2ZjUwZTdkZjRmNDRjMWRlZmUxODM1NTEzMTA0OWU5KQorLSAgYENvZGVJZ25pdGVyIHYxLjcuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjcuMi56aXA+YF8gKE1ENSBDaGVja3N1bTogZmYyZjRkMWIzYWI5MjFmOTFlMDA2ZjM4YjNhZTY1NDApCistICBgQ29kZUlnbml0ZXIgdjEuNy4xIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNy4xLnppcD5gXyAoTUQ1IENoZWNrc3VtOiBkZWNhOTcwOWNmMjFiMjZkYzBlNGVjMDQwYjM3ZTg2NikKKy0gIGBDb2RlSWduaXRlciB2MS43LjAgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS43LjAuemlwPmBfIChNRDUgQ2hlY2tzdW06IDI4MDM3ZjIwNzFmOTQwZDg3NTY4NjQ0NjBkOTQ5MDQ1KQorLSAgYENvZGVJZ25pdGVyIHYxLjYuMyA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjYuMy56aXA+YF8gKE1ENSBDaGVja3N1bTogNWZmYWI1MmIzOWIyMzVlZDZiZDA4ZWU1ZGQ2NGQyZjYpCistICBgQ29kZUlnbml0ZXIgdjEuNi4yIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNi4yLnppcD5gXyAoTUQ1IENoZWNrc3VtOiAwOTIyODMwZjk2ZGZkNDA4NzRiMzlhZDAxOGE0OTIwNikKKy0gIGBDb2RlSWduaXRlciB2MS42LjEgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS42LjEuemlwPmBfIChNRDUgQ2hlY2tzdW06IGNjM2YwYjU2NmUzNjU0ZDM1MWZhMDY3YWVlZTliY2VkKQorLSAgYENvZGVJZ25pdGVyIHYxLjYuMCA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjYuMC56aXA+YF8gKE1ENSBDaGVja3N1bTogODllZmFiYjhjMWQ1N2JiNTEwNzFlNmEyMGJiNTU5MGQpCistICBgQ29kZUlnbml0ZXIgdjEuNS40IDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNS40LnppcD5gXyAoTUQ1IENoZWNrc3VtOiAwZDZjYzY2YjAxZDVkZGVjZGU0ODNiM2Q1ZjUxZTRmOCkKKy0gIGBDb2RlSWduaXRlciB2MS41LjMgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS41LjMuemlwPmBfIChNRDUgQ2hlY2tzdW06IGY0NGRkMjFkMzRhMjg0MmJkMDUyODc5Y2E1ZGU2NjMwKQorLSAgYENvZGVJZ25pdGVyIHYxLjUuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjUuMi56aXA+YF8gKE1ENSBDaGVja3N1bTogNzhlNzEwNmIyNzFmNzVhZjQ4ZTYyNmY2ZTkyM2MxYWEpCistICBgQ29kZUlnbml0ZXIgdjEuNS4xIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNS4xLnppcD5gXyAoTUQ1IENoZWNrc3VtOiA5ZGZkMGRiZWQ0ZjI4M2E0MmE4MTdlMWU4OGY5NzQ4MSkKKy0gIGBDb2RlSWduaXRlciB2MS41LjAgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS41LjAuemlwPmBfIChNRDUgQ2hlY2tzdW06IDExNmI4MDVlYWU0YjdlNzhkZGQ0M2E4YWVlNzMzNjMyKQorLSAgYENvZGVJZ25pdGVyIHYxLjQuMSA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjQuMS56aXA+YF8gKE1ENSBDaGVja3N1bTogNDcwMDA1YTgzNzcyZTlkMmU5OWRlYzJiNDA1OGU1ODQpCistICBgQ29kZUlnbml0ZXIgdjEuNC4wIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuNC4wLnppcD5gXyAoTUQ1IENoZWNrc3VtOiA0M2NhNmZmMzQ0N2Q2YjU2ODFmOThhMzI4YjM4NjMzOCkKKy0gIGBDb2RlSWduaXRlciB2MS4zLjMgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS4zLjMuemlwPmBfIChNRDUgQ2hlY2tzdW06IDU1NjkyYmE0YjU1YjUzYjU4ZTQ1MTRlMzEwMjg4OTgxKQorLSAgYENvZGVJZ25pdGVyIHYxLjMuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjMuMi56aXA+YF8gKE1ENSBDaGVja3N1bTogN2RhY2U2ZTFkNjI0NWI1Njk5NDNlOGRmOTUyYzc2MzcpCistICBgQ29kZUlnbml0ZXIgdjEuMy4xIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuMy4xLnppcD5gXyAoTUQ1IENoZWNrc3VtOiBmNmM2ZjAwODMwYzYwZDdmOThiOTQ4MjY5ZWU4MTA2OSkKKy0gIGBDb2RlSWduaXRlciB2MS4zIDxodHRwOi8vZWxsaXNsYWIuY29tL2Fzc2V0L2NpX2Rvd25sb2FkX2ZpbGVzL0NvZGVJZ25pdGVyXzEuMy56aXA+YF8gKE1ENSBDaGVja3N1bTogMDNiMmY3OTZkZjZhZjgwOGVjZmYzYTE4YjYwMDA0NzcpCistICBgQ29kZUlnbml0ZXIgdjEuMiA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjIuemlwPmBfIChNRDUgQ2hlY2tzdW06IGY5Mjg5ODE0ZmFiZTEwMmJjMzViZWI3OTFkMGMwZjYyKQorLSAgYENvZGVJZ25pdGVyIHYxLjEgPGh0dHA6Ly9lbGxpc2xhYi5jb20vYXNzZXQvY2lfZG93bmxvYWRfZmlsZXMvQ29kZUlnbml0ZXJfMS4xYi56aXA+YF8gKE1ENSBDaGVja3N1bTogYmY0Y2FiYjZhM2VhMzEyMmE5NzQyNzBiODA0NGJlZmIpCistICBgQ29kZUlnbml0ZXIgdjEuMCA8aHR0cDovL2VsbGlzbGFiLmNvbS9hc3NldC9jaV9kb3dubG9hZF9maWxlcy9Db2RlSWduaXRlcl8xLjBiLnppcD5gXyAoTUQ1IENoZWNrc3VtOiA0MjdjYTQyNTVlMmJkYWFjZWU5NzZkZTFhYTE0M2VhMCkKIAogCiAqKioqKioKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9pbnN0YWxsYXRpb24vdXBncmFkZV8zMDAucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2luc3RhbGxhdGlvbi91cGdyYWRlXzMwMC5yc3QKaW5kZXggYjM2YTcwYy4uYzExZGIzNCAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2luc3RhbGxhdGlvbi91cGdyYWRlXzMwMC5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2luc3RhbGxhdGlvbi91cGdyYWRlXzMwMC5yc3QKQEAgLTE3LDIyICsxNyw2MyBAQAogLi4gbm90ZTo6IElmIHlvdSBoYXZlIGFueSBjdXN0b20gZGV2ZWxvcGVkIGZpbGVzIGluIHRoZXNlIGZvbGRlcnMgcGxlYXNlCiAJbWFrZSBjb3BpZXMgb2YgdGhlbSBmaXJzdC4KIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1N0ZXAgMjogVXBkYXRlIHlvdXIgY2xhc3NlcyBmaWxlIG5hbWVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitTdGFydGluZyB3aXRoIENvZGVJZ25pdGVyIDMuMCwgYWxsIGNsYXNzIGZpbGVuYW1lcyAobGlicmFyaWVzLCBkcml2ZXJzLCBjb250cm9sbGVycworYW5kIG1vZGVscykgbXVzdCBiZSBuYW1lZCBpbiBhIFVjZmlyc3QtbGlrZSBtYW5uZXIgb3IgaW4gb3RoZXIgd29yZHMgLSB0aGV5IG11c3QKK3N0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlci4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgbGlicmFyeSBmaWxlOgorCisJYXBwbGljYXRpb24vbGlicmFyaWVzL215bGlicmFyeS5waHAKKworLi4uIHRoZW4geW91J2xsIGhhdmUgdG8gcmVuYW1lIGl0IHRvOgorCisJYXBwbGljYXRpb24vbGlicmFyaWVzL015bGlicmFyeS5waHAKKworVGhlIHNhbWUgZ29lcyBmb3IgZHJpdmVyIGxpYnJhcmllcyBhbmQgZXh0ZW5zaW9ucyBhbmQvb3Igb3ZlcnJpZGVzIG9mIENvZGVJZ25pdGVyJ3MKK293biBsaWJyYXJpZXMgYW5kIGNvcmUgY2xhc3Nlcy4KKworCWFwcGxpY2F0aW9uL2xpYnJhcmllcy9NWV9lbWFpbC5waHAKKwlhcHBsaWNhdGlvbi9jb3JlL01ZX2xvZy5waHAKKworVGhlIGFib3ZlIGZpbGVzIHNob3VsZCByZXNwZWN0aXZlbHkgYmUgcmVuYW1lZCB0byB0aGUgZm9sbG93aW5nOgorCisJYXBwbGljYXRpb24vbGlicmFyaWVzL01ZX0VtYWlsLnBocAorCWFwcGxpY2F0aW9uL2NvcmUvTVlfTG9nLnBocAorCitDb250cm9sbGVyczoKKworCWFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL3dlbGNvbWUucGhwCS0+CWFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL1dlbGNvbWUucGhwCisKK01vZGVsczoKKworCWFwcGxpY2F0aW9uL21vZGVscy9taXNjX21vZGVsLnBocAktPglhcHBsaWNhdGlvbi9tb2RlbHMvTWlzY19tb2RlbC5waHAKKworUGxlYXNlIG5vdGUgdGhhdCB0aGlzIERPRVMgTk9UIGFmZmVjdCBkaXJlY3RvcmllcywgY29uZmlndXJhdGlvbiBmaWxlcywgdmlld3MsCitoZWxwZXJzLCBob29rcyBhbmQgYW55dGhpbmcgZWxzZSAtIGl0IGlzIG9ubHkgYXBwbGllZCB0byBjbGFzc2VzLgorCitZb3UgbXVzdCBub3cgZm9sbG93IGp1c3Qgb25lIHNpbXBsZSBydWxlIC0gY2xhc3MgbmFtZXMgaW4gVWNmaXJzdCBhbmQgZXZlcnl0aGluZyBlbHNlCitpbiBsb3dlcmNhc2UuCisKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1TdGVwIDI6IFJlcGxhY2UgY29uZmlnL21pbWVzLnBocAorU3RlcCAzOiBSZXBsYWNlIGNvbmZpZy9taW1lcy5waHAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIFRoaXMgY29uZmlnIGZpbGUgaGFzIGJlZW4gdXBkYXRlZCB0byBjb250YWluIG1vcmUgdXNlciBtaW1lLXR5cGVzLCBwbGVhc2UgY29weQogaXQgdG8gX2FwcGxpY2F0aW9uL2NvbmZpZy9taW1lcy5waHAqLgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotU3RlcCAzOiBSZW1vdmUgJGF1dG9sb2FkWydjb3JlJ10gZnJvbSB5b3VyIGNvbmZpZy9hdXRvbG9hZC5waHAKK1N0ZXAgNDogUmVtb3ZlICRhdXRvbG9hZFsnY29yZSddIGZyb20geW91ciBjb25maWcvYXV0b2xvYWQucGhwCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBVc2Ugb2YgdGhlIGBgJGF1dG9sb2FkWydjb3JlJ11gYCBjb25maWcgYXJyYXkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiBDb2RlSWduaXRlciAxLjQuMSBhbmQgaXMgbm93IHJlbW92ZWQuCiBNb3ZlIGFueSBlbnRyaWVzIHRoYXQgeW91IG1pZ2h0IGhhdmUgbGlzdGVkIHRoZXJlIHRvIGBgJGF1dG9sb2FkWydsaWJyYXJpZXMnXWBgIGluc3RlYWQuCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotU3RlcCA0OiBNb3ZlIHlvdXIgTG9nIGNsYXNzIG92ZXJyaWRlcyBvciBleHRlbnNpb25zCitTdGVwIDU6IE1vdmUgeW91ciBMb2cgY2xhc3Mgb3ZlcnJpZGVzIG9yIGV4dGVuc2lvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBUaGUgTG9nIENsYXNzIGlzIGNvbnNpZGVyZWQgYXMgYSAiY29yZSIgY2xhc3MgYW5kIGlzIG5vdyBsb2NhdGVkIGluIHRoZQpAQCAtNDAsMTAgKzgxLDEwIEBACiBvciBleHRlbnNpb25zIHRvIHdvcmssIHlvdSBuZWVkIHRvIG1vdmUgdGhlbSB0byAqKmFwcGxpY2F0aW9uL2NvcmUvKio6OgogCiAJYXBwbGljYXRpb24vbGlicmFyaWVzL0xvZy5waHAgLT4gYXBwbGljYXRpb24vY29yZS9Mb2cucGhwCi0JYXBwbGljYXRpb24vbGlicmFyaWVzL01ZX0xvZy5waHAgLT4gYXBwbGljYXRpb24vY29yZS9NWV9sb2cucGhwCisJYXBwbGljYXRpb24vbGlicmFyaWVzL01ZX0xvZy5waHAgLT4gYXBwbGljYXRpb24vY29yZS9NWV9Mb2cucGhwCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotU3RlcCA1OiBDb252ZXJ0IHlvdXIgU2Vzc2lvbiB1c2FnZSBmcm9tIGxpYnJhcnkgdG8gZHJpdmVyCitTdGVwIDY6IENvbnZlcnQgeW91ciBTZXNzaW9uIHVzYWdlIGZyb20gbGlicmFyeSB0byBkcml2ZXIKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBXaGVuIHlvdSBsb2FkIChvciBhdXRvbG9hZCkgdGhlIFNlc3Npb24gbGlicmFyeSwgeW91IG11c3Qgbm93IGxvYWQgaXQgYXMgYSBkcml2ZXIgaW5zdGVhZCBvZiBhIGxpYnJhcnkuIFRoaXMgbWVhbnMKQEAgLTY3LDcgKzEwOCw3IEBACiB0aGUgZHJpdmVycywgc28geW91ciBleHRlbnNpb24gbWF5IGhhdmUgdG8gYmUgYnJva2VuIGRvd24gaW50byBzZXBhcmF0ZSBsaWJyYXJ5IGFuZCBkcml2ZXIgY2xhc3MgZXh0ZW5zaW9ucy4KIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1TdGVwIDY6IFVwZGF0ZSB5b3VyIGNvbmZpZy9kYXRhYmFzZS5waHAKK1N0ZXAgNzogVXBkYXRlIHlvdXIgY29uZmlnL2RhdGFiYXNlLnBocAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIER1ZSB0byAzLjAuMCdzIHJlbmFtaW5nIG9mIEFjdGl2ZSBSZWNvcmQgdG8gUXVlcnkgQnVpbGRlciwgaW5zaWRlIHlvdXIgYGNvbmZpZy9kYXRhYmFzZS5waHBgLCB5b3Ugd2lsbApAQCAtNzgsMTQgKzExOSwyMSBAQAogCS8vICRhY3RpdmVfcmVjb3JkID0gVFJVRTsKIAkkcXVlcnlfYnVpbGRlciA9IFRSVUU7CiAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLVN0ZXAgNzogTW92ZSB5b3VyIGVycm9ycyBmb2xkZXIKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU3RlcCA4OiBSZXBsYWNlIHlvdXIgZXJyb3IgdGVtcGxhdGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotSW4gdmVyc2lvbiAzLjAuMCwgdGhlIGVycm9ycyBmb2xkZXIgaGFzIGJlZW4gbW92ZWQgZnJvbSBfYXBwbGljYXRpb24vZXJyb3JzKiB0byBfYXBwbGljYXRpb24vdmlld3MvZXJyb3JzKi4KK0luIENvZGVJZ25pdGVyIDMuMCwgdGhlIGVycm9yIHRlbXBsYXRlcyBhcmUgbm93IGNvbnNpZGVyZWQgYXMgdmlld3MgYW5kIGhhdmUgYmVlbiBtb3ZlZCB0byB0aGUKK19hcHBsaWNhdGlvbi92aWV3cy9lcnJvcnMqIGRpcmVjdG9yeS4KKworRnVydGhlcm1vcmUsIHdlJ3ZlIGFkZGVkIHN1cHBvcnQgZm9yIENMSSBlcnJvciB0ZW1wbGF0ZXMgaW4gcGxhaW4tdGV4dCBmb3JtYXQgdGhhdCB1bmxpa2UgSFRNTCwKK2lzIHN1aXRhYmxlIGZvciB0aGUgY29tbWFuZCBsaW5lLiBUaGlzIG9mIGNvdXJzZSByZXF1aXJlcyBhbm90aGVyIGxldmVsIG9mIHNlcGFyYXRpb24uCisKK0l0IGlzIHNhZmUgdG8gbW92ZSB5b3VyIG9sZCB0ZW1wbGF0ZXMgZnJvbSBfYXBwbGljYXRpb24vZXJyb3JzKiB0byBfYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2h0bWwqLAorYnV0IHlvdSdsbCBoYXZlIHRvIGNvcHkgdGhlIG5ldyBfYXBwbGljYXRpb24vdmlld3MvZXJyb3JzL2NsaSogZGlyZWN0b3J5IGZyb20gdGhlIENvZGVJZ25pdGVyIGFyY2hpdmUuCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLVN0ZXAgODogVXBkYXRlIHlvdXIgY29uZmlnL3JvdXRlcy5waHAgY29udGFpbmluZyAoOmFueSkKK1N0ZXAgOTogVXBkYXRlIHlvdXIgY29uZmlnL3JvdXRlcy5waHAgY29udGFpbmluZyAoOmFueSkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogSGlzdG9yaWNhbGx5LCBDb2RlSWduaXRlciBoYXMgYWx3YXlzIHByb3ZpZGVkIHRoZSAqKjphbnkqKiB3aWxkY2FyZCBpbiByb3V0aW5nLApAQCAtMTA0LDQ3ICsxNTIsOTMgQEAKIAkoLispCS8vIG1hdGNoZXMgQU5ZVEhJTkcKIAkoOmFueSkJLy8gbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLCBleGNlcHQgZm9yICcvJwogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotU3RlcCA5OiBVcGRhdGUgeW91ciBsaWJyYXJpZXMnIGZpbGUgbmFtZXMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitTdGVwIDEwOiBNYW55IGZ1bmN0aW9ucyBub3cgcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBGQUxTRSBvbiBtaXNzaW5nIGl0ZW1zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUNvZGVJZ25pdGVyIDMuMCBvbmx5IGFsbG93cyBsaWJyYXJ5IGZpbGUgbmFtZXMgdG8gYmUgbmFtZWQgaW4gYSAqdWNmaXJzdCogbWFubmVyCi0obWVhbmluZyB0aGF0IHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIGNsYXNzIG5hbWUgbXVzdCBiZSBhIGNhcGl0YWwpLiBGb3IgZXhhbXBsZSwKLWlmIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgbGlicmFyeSBmaWxlOgorTWFueSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbm93IHJldHVybiBOVUxMIGluc3RlYWQgb2YgRkFMU0Ugd2hlbiB0aGUgcmVxdWlyZWQgaXRlbXMgZG9uJ3QgZXhpc3Q6CiAKLQlhcHBsaWNhdGlvbi9saWJyYXJpZXMvbXlsaWJyYXJ5LnBocAorIC0gOmRvYzpgQ29uZmlnIENsYXNzIDwuLi9saWJyYXJpZXMvY29uZmlnPmAKIAotLi4uIHRoZW4geW91J2xsIGhhdmUgdG8gcmVuYW1lIGl0IHRvOgorICAgLSBjb25maWctPml0ZW0oKQorICAgLSBjb25maWctPnNsYXNoX2l0ZW0oKQogCi0JYXBwbGljYXRpb24vbGlicmFyaWVzL015bGlicmFyeS5waHAKKyAtIDpkb2M6YElucHV0IENsYXNzIDwuLi9saWJyYXJpZXMvaW5wdXQ+YAogCi1UaGUgc2FtZSBnb2VzIGZvciBkcml2ZXIgbGlicmFyaWVzIGFuZCBleHRlbnNpb25zIGFuZC9vciBvdmVycmlkZXMgb2YgQ29kZUlnbml0ZXIncwotb3duIGxpYnJhcmllcyBhbmQgY29yZSBjbGFzc2VzLgorICAgLSBpbnB1dC0+Z2V0KCkKKyAgIC0gaW5wdXQtPnBvc3QoKQorICAgLSBpbnB1dC0+Z2V0X3Bvc3QoKQorICAgLSBpbnB1dC0+Y29va2llKCkKKyAgIC0gaW5wdXQtPnNlcnZlcigpCisgICAtIGlucHV0LT5pbnB1dF9zdHJlYW0oKQorICAgLSBpbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCkKIAotCWFwcGxpY2F0aW9uL2xpYnJhcmllcy9NWV9lbWFpbC5waHAKLQlhcHBsaWNhdGlvbi9jb3JlL01ZX2xvZy5waHAKKyAtIDpkb2M6YFNlc3Npb24gQ2xhc3MgPC4uL2xpYnJhcmllcy9zZXNzaW9ucz5gCiAKLVRoZSBhYm92ZSBmaWxlcyBzaG91bGQgcmVzcGVjdGl2ZWx5IGJlIHJlbmFtZWQgdG8gdGhlIGZvbGxvd2luZzoKKyAgIC0gc2Vzc2lvbi0+dXNlcmRhdGEoKQorICAgLSBzZXNzaW9uLT5mbGFzaGRhdGEoKQogCi0JYXBwbGljYXRpb24vbGlicmFyaWVzL01ZX0VtYWlsLnBocAotCWFwcGxpY2F0aW9uL2NvcmUvTVlfTG9nLnBocAorIC0gOmRvYzpgVVJJIENsYXNzIDwuLi9saWJyYXJpZXMvdXJpPmAKIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLVN0ZXAgMTA6IENoZWNrIHRoZSBjYWxscyB0byBBcnJheSBIZWxwZXIncyBlbGVtZW50KCkgYW5kIGVsZW1lbnRzKCkgZnVuY3Rpb25zCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgLSB1cmktPnNlZ21lbnQoKQorICAgLSB1cmktPnJzZWdtZW50KCkKIAotVGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIG9mIHRoZXNlIGZ1bmN0aW9ucywgd2hlbiB0aGUgcmVxdWlyZWQgZWxlbWVudHMKLWRvbid0IGV4aXN0LCBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gRkFMU0UgdG8gTlVMTC4KKyAtIDpkb2M6YEFycmF5IEhlbHBlciA8Li4vaGVscGVycy9hcnJheV9oZWxwZXI+YAorCisgICAtIGVsZW1lbnQoKQorICAgLSBlbGVtZW50cygpCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1N0ZXAgMTE6IFVzYWdlIG9mIFhTUyBmaWx0ZXJpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTWFueSBmdW5jdGlvbnMgaW4gQ29kZUlnbml0ZXIgYWxsb3cgeW91IHRvIHVzZSBpdHMgWFNTIGZpbHRlcmluZyBmZWF0dXJlCitvbiBkZW1hbmQgYnkgcGFzc2luZyBhIGJvb2xlYW4gcGFyYW1ldGVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGF0CitwYXJhbWV0ZXIgdXNlZCB0byBiZSBib29sZWFuIEZBTFNFLCBidXQgaXQgaXMgbm93IGNoYW5nZWQgdG8gTlVMTCBhbmQgaXQKK3dpbGwgYmUgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZCBieSB5b3VyIGBgJGNvbmZpZ1snZ2xvYmFsX3hzc19maWx0ZXJpbmcnXWBgCit2YWx1ZS4KKworSWYgeW91IHVzZWQgdG8gbWFudWFsbHkgcGFzcyBhIGJvb2xlYW4gdmFsdWUgZm9yIHRoZSBgYCR4c3NfZmlsdGVyYGAKK3BhcmFtZXRlciBvciBpZiB5b3UndmUgYWx3YXlzIGhhZCBgYCRjb25maWdbJ2dsb2JhbF94c3NfZmlsdGVyaW5nJ11gYCBzZXQKK3RvIEZBTFNFLCB0aGVuIHRoaXMgY2hhbmdlIGRvZXNuJ3QgY29uY2VybiB5b3UuCisKK090aGVyd2lzZSBob3dldmVyLCBwbGVhc2UgcmV2aWV3IHlvdXIgdXNhZ2Ugb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKyAtIDpkb2M6YElucHV0IExpYnJhcnkgPC4uL2xpYnJhcmllcy9pbnB1dD5gCisKKyAgIC0gaW5wdXQtPmdldCgpCisgICAtIGlucHV0LT5wb3N0KCkKKyAgIC0gaW5wdXQtPmdldF9wb3N0KCkKKyAgIC0gaW5wdXQtPmNvb2tpZSgpCisgICAtIGlucHV0LT5zZXJ2ZXIoKQorICAgLSBpbnB1dC0+aW5wdXRfc3RyZWFtKCkKKworIC0gOmRvYzpgQ29va2llIEhlbHBlciA8Li4vaGVscGVycy9jb29raWVfaGVscGVyPmAgOmZ1bmM6YGdldF9jb29raWUoKWAKKworLi4gaW1wb3J0YW50OjogQW5vdGhlciByZWxhdGVkIGNoYW5nZSBpcyB0aGF0IHRoZSBgYCRfR0VUYGAsIGBgJF9QT1NUYGAsCisJYGAkX0NPT0tJRWBgIGFuZCBgYCRfU0VSVkVSYGAgc3VwZXJnbG9iYWxzIGFyZSBubyBsb25nZXIKKwlhdXRvbWF0aWNhbGx5IG92ZXJ3cml0dGVuIHdoZW4gZ2xvYmFsIFhTUyBmaWx0ZXJpbmcgaXMgdHVybmVkIG9uLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU3RlcCAxMjogVXBkYXRlIHVzYWdlIG9mIElucHV0IENsYXNzJ3MgZ2V0X3Bvc3QoKSBtZXRob2QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1ByZXZpb3VzbHksIHRoZSA6ZG9jOmBJbnB1dCBDbGFzcyA8Li4vbGlicmFyaWVzL2lucHV0PmAgbWV0aG9kIGBgZ2V0X3Bvc3QoKWBgCit3YXMgc2VhcmNoaW5nIGZpcnN0IGluIFBPU1QgZGF0YSwgdGhlbiBpbiBHRVQgZGF0YS4gVGhpcyBtZXRob2QgaGFzIGJlZW4KK21vZGlmaWVkIHNvIHRoYXQgaXQgc2VhcmNoZXMgaW4gR0VUIHRoZW4gaW4gUE9TVCwgYXMgaXRzIG5hbWUgc3VnZ2VzdHMuCisKK0EgbWV0aG9kIGhhcyBiZWVuIGFkZGVkLCBgYHBvc3RfZ2V0KClgYCwgd2hpY2ggc2VhcmNoZXMgaW4gUE9TVCB0aGVuIGluIEdFVCwgYXMKK2BgZ2V0X3Bvc3QoKWBgIHdhcyBkb2luZyBiZWZvcmUuCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1TdGVwIDExOiBDaGVjayB0aGUgY2FsbHMgdG8gRGlyZWN0b3J5IEhlbHBlcidzIGRpcmVjdG9yeV9tYXAoKSBmdW5jdGlvbgorU3RlcCAxMzogVXBkYXRlIHVzYWdlIG9mIERpcmVjdG9yeSBIZWxwZXIncyBkaXJlY3RvcnlfbWFwKCkgZnVuY3Rpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIEluIHRoZSByZXN1bHRpbmcgYXJyYXksIGRpcmVjdG9yaWVzIG5vdyBlbmQgd2l0aCBhIHRyYWlsaW5nIGRpcmVjdG9yeQogc2VwYXJhdG9yIChpLmUuIGEgc2xhc2gsIHVzdWFsbHkpLgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1TdGVwIDEyOiBVcGRhdGUgdXNhZ2Ugb2YgRGF0YWJhc2UgRm9yZ2UncyBkcm9wX3RhYmxlKCkgbWV0aG9kCitTdGVwIDE0OiBVcGRhdGUgdXNhZ2Ugb2YgRGF0YWJhc2UgRm9yZ2UncyBkcm9wX3RhYmxlKCkgbWV0aG9kCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIFVwIHVudGlsIG5vdywgYGBkcm9wX3RhYmxlKClgYCBhZGRlZCBhbiBJRiBFWElTVFMgY2xhdXNlIGJ5IGRlZmF1bHQgb3IgaXQgZGlkbid0IHdvcmsKQEAgLTE2Niw3ICsyNjAsNyBAQAogCWFsbCBkcml2ZXJzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBPREJDLgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotU3RlcCAxMzogQ2hhbmdlIHVzYWdlIG9mIEVtYWlsIGxpYnJhcnkgd2l0aCBtdWx0aXBsZSBlbWFpbHMKK1N0ZXAgMTU6IENoYW5nZSB1c2FnZSBvZiBFbWFpbCBsaWJyYXJ5IHdpdGggbXVsdGlwbGUgZW1haWxzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBUaGUgOmRvYzpgRW1haWwgTGlicmFyeSA8Li4vbGlicmFyaWVzL2VtYWlsPmAgd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZQpAQCAtMTgxLDcgKzI3NSw3IEBACiAgCX0KIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1TdGVwIDE0OiBVcGRhdGUgeW91ciBGb3JtX3ZhbGlkYXRpb24gbGFuZ3VhZ2UgbGluZXMKK1N0ZXAgMTY6IFVwZGF0ZSB5b3VyIEZvcm1fdmFsaWRhdGlvbiBsYW5ndWFnZSBsaW5lcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIFR3byBpbXByb3ZlbWVudHMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIDpkb2M6YEZvcm0gVmFsaWRhdGlvbiBMaWJyYXJ5CkBAIC0yMTIsNyArMzA2LDcgQEAKIAlsYXRlci4KIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotU3RlcCAxNTogUmVtb3ZlIHVzYWdlIG9mIChwcmV2aW91c2x5KSBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdGllcworU3RlcCAxNzogUmVtb3ZlIHVzYWdlIG9mIChwcmV2aW91c2x5KSBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdGllcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBJbiBhZGRpdGlvbiB0byB0aGUgYGAkYXV0b2xvYWRbJ2NvcmUnXWBgIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgdGhlcmUncyBhCkBAIC0yMzksNiArMzMzLDI2IEBACiA6ZG9jOmBTbWlsZXkgSGVscGVyIDwuLi9oZWxwZXJzL3NtaWxleV9oZWxwZXI+YCBmdW5jdGlvbiBgYGpzX2luc2VydF9zbWlsZXkoKWBgIGhhcyBiZWVuIGRlcHJlY2F0ZWQKIHNpbmNlIENvZGVJZ25pdGVyIDEuNy4yIGFuZCBpcyBub3cgcmVtb3ZlZC4gWW91J2xsIG5lZWQgdG8gc3dpdGNoIHRvIGBgc21pbGV5X2pzKClgYCBpbnN0ZWFkLgogCitEYXRhYmFzZSBkcml2ZXJzICdteXNxbCcsICdzcWxpdGUnLCAnbXNzcWwnLCAncGRvL2RibGliJworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlICoqbXlzcWwqKiBkcml2ZXIgdXRpbGl6ZXMgdGhlIG9sZCAnbXlzcWwnIFBIUCBleHRlbnNpb24sIGtub3duIGZvciBpdHMgYWdpbmcgY29kZSBiYXNlIGFuZAorbWFueSBsb3ctbGV2ZWwgcHJvYmxlbXMuIFRoZSBleHRlbnNpb24gaXMgZGVwcmVjYXRlZCBhcyBvZiBQSFAgNS41IGFuZCBDb2RlSWduaXRlciBkZXByZWNhdGVzCitpdCBpbiB2ZXJzaW9uIDMuMCwgc3dpdGNoaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgTXlTUUwgZHJpdmVyIHRvICoqbXlzcWxpKiouCisKK1BsZWFzZSB1c2UgZWl0aGVyIHRoZSAnbXlzcWxpJyBvciAncGRvL215c3FsJyBkcml2ZXJzIGZvciBNeVNRTC4gVGhlIG9sZCAnbXlzcWwnIGRyaXZlciB3aWxsIGJlCityZW1vdmVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKworVGhlICoqc3FsaXRlKiosICoqbXNzcWwqKiBhbmQgKipwZG8vZGJsaWIqKiAoYWxzbyBrbm93biBhcyBwZG8vbXNzcWwgb3IgcGRvL3N5YmFzZSkgZHJpdmVycworYWxsIGRlcGVuZCBvbiBQSFAgZXh0ZW5zaW9ucyB0aGF0IGZvciBkaWZmZXJlbnQgcmVhc29ucyBubyBsb25nZXIgZXhpc3Qgc2luY2UgUEhQIDUuMy4KKworVGhlcmVmb3JlIHdlIGFyZSBub3cgZGVwcmVjYXRpbmcgdGhlc2UgZHJpdmVycyBhcyB3ZSB3aWxsIGhhdmUgdG8gcmVtb3ZlIHRoZW0gaW4gb25lIG9mIHRoZSBuZXh0CitDb2RlSWduaXRlciB2ZXJzaW9ucy4gWW91IHNob3VsZCB1c2UgdGhlIG1vcmUgYWR2YW5jZWQsICoqc3FsaXRlMyoqLCAqKnNxbHNydioqIG9yICoqcGRvL3NxbHNydioqCitkcml2ZXJzIHJlc3BlY3RpdmVseS4KKworLi4gbm90ZTo6IFRoZXNlIGRyaXZlcnMgYXJlIHN0aWxsIGF2YWlsYWJsZSwgYnV0IHlvdSdyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHN3aXRjaCB0byBvdGhlciBvbmVzCisJc29vbmVyIHJhdGhlciB0aGFuIGxhdGVyLgorCiBTZWN1cml0eSBoZWxwZXIgZG9faGFzaCgpCiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTQwMSw0ICs1MTUsNDYgQEAKIAkkdGhpcy0+cm91dGVyLT5tZXRob2Q7CiAKIC4uIG5vdGU6OiBUaG9zZSBtZXRob2RzIGFyZSBzdGlsbCBhdmFpbGFibGUsIGJ1dCB5b3UncmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byByZW1vdmUgdGhlaXIgdXNhZ2UKLQlzb29uZXIgcmF0aGVyIHRoYW4gbGF0ZXIuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCXNvb25lciByYXRoZXIgdGhhbiBsYXRlci4KKworSW5wdXQgbGlicmFyeSBtZXRob2QgaXNfY2xpX3JlcXVlc3QoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWxscyB0byB0aGUgYGBDSV9JbnB1dDo6aXNfY2xpX3JlcXVlc3QoKWBgIG1ldGhvZCBhcmUgbmVjZXNzYXJ5IGF0IG1hbnkgcGxhY2VzCitpbiB0aGUgQ29kZUlnbml0ZXIgaW50ZXJuYWxzIGFuZCB0aGlzIGlzIG9mdGVuIGJlZm9yZSB0aGUgOmRvYzpgSW5wdXQgTGlicmFyeQorPC4uL2xpYnJhcmllcy9pbnB1dD5gIGlzIGxvYWRlZC4gQmVjYXVzZSBvZiB0aGF0LCBpdCBpcyBiZWluZyByZXBsYWNlZCBieSBhIGNvbW1vbgorZnVuY3Rpb24gbmFtZWQgOnBocDpmdW5jOmBpc19jbGkoKWAgYW5kIHRoaXMgbWV0aG9kIGlzIG5vdyBqdXN0IGFuIGFsaWFzLgorCitUaGUgbmV3IGZ1bmN0aW9uIGlzIGJvdGggYXZhaWxhYmxlIGF0IGFsbCB0aW1lcyBmb3IgeW91IHRvIHVzZSBhbmQgc2hvcnRlciB0byB0eXBlLgorCis6OgorCisJLy8gT2xkCisJJHRoaXMtPmlucHV0LT5pc19jbGlfcmVxdWVzdCgpOworCisJLy8gTmV3CisJaXNfY2xpKCk7CisKK2BgQ0lfSW5wdXQ6OmlzX2NsaV9yZXF1ZXN0KClgYCBpcyBub3cgbm93IGRlcHJlY2F0ZWQgYW5kIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCBpbgorQ29kZUlnbml0ZXIgMy4xKy4KKworLi4gbm90ZTo6IFRoaXMgbWV0aG9kIGlzIHN0aWxsIGF2YWlsYWJsZSwgYnV0IHlvdSdyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHJlbW92ZSBpdHMgdXNhZ2UKKwlzb29uZXIgcmF0aGVyIHRoYW4gbGF0ZXIuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitTdGVwIDE4OiBDaGVjayB5b3VyIHVzYWdlIG9mIFRleHQgaGVscGVyIGhpZ2hsaWdodF9waHJhc2UoKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGRlZmF1bHQgSFRNTCB0YWcgdXNlZCBieSA6ZG9jOmBUZXh0IEhlbHBlciA8Li4vaGVscGVycy90ZXh0X2hlbHBlcj5gIGZ1bmN0aW9uCis6ZnVuYzpgaGlnaGxpZ2h0X3BocmFzZSgpYCBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gYGA8c3Ryb25nPmBgIHRvIHRoZSBuZXcgSFRNTDUKK3RhZyBgYDxtYXJrPmBgLgorCitVbmxlc3MgeW91J3ZlIHVzZWQgeW91ciBvd24gaGlnaGxpZ2h0aW5nIHRhZ3MsIHRoaXMgbWlnaHQgY2F1c2UgdHJvdWJsZQorZm9yIHlvdXIgdmlzaXRvcnMgd2hvIHVzZSBvbGRlciB3ZWIgYnJvd3NlcnMgc3VjaCBhcyBJbnRlcm5ldCBFeHBsb3JlciA4LgorV2UgdGhlcmVmb3JlIHN1Z2dlc3QgdGhhdCB5b3UgYWRkIHRoZSBmb2xsb3dpbmcgY29kZSB0byB5b3VyIENTUyBmaWxlcworaW4gb3JkZXIgdG8gYXZvaWQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgYnJvd3NlcnM6OgorCisJbWFyayB7CisJCWJhY2tncm91bmQ6ICNmZjA7CisJCWNvbG9yOiAjMDAwOworCX07CmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2NhY2hpbmcucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9jYWNoaW5nLnJzdAppbmRleCA1YTk3NDIzLi4zMGE5ZmVkIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2NhY2hpbmcucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvY2FjaGluZy5yc3QKQEAgLTI0MCwxNyArMjQwLDI4IEBACiBSZWRpcyBDYWNoaW5nCiA9PT09PT09PT09PT09CiAKK1JlZGlzIGlzIGFuIGluLW1lbW9yeSBrZXktdmFsdWUgc3RvcmUgd2hpY2ggY2FuIG9wZXJhdGUgaW4gTFJVIGNhY2hlIG1vZGUuIAorVG8gdXNlIGl0LCB5b3UgbmVlZCBSZWRpcyBzZXJ2ZXIgYW5kIHBocHJlZGlzIFBIUCBleHRlbnNpb24gCitgaHR0cHM6Ly9naXRodWIuY29tL25pY29sYXNmZi9waHByZWRpcyA8aHR0cHM6Ly9naXRodWIuY29tL25pY29sYXNmZi9waHByZWRpcz5gXy4KKworQ29uZmlnIG9wdGlvbnMgdG8gY29ubmVjdCB0byByZWRpcyBzZXJ2ZXIgbXVzdCBiZSBzdG9yZWQgaW4gdGhlIGFwcGxpY2F0aW9uL2NvbmZpZy9yZWRpcy5waHAgZmlsZS4KK0F2YWlsYWJsZSBvcHRpb25zIGFyZTo6CisJCisJJGNvbmZpZ1snc29ja2V0X3R5cGUnXSA9ICd0Y3AnOyAvL2B0Y3BgIG9yIGB1bml4YAorCSRjb25maWdbJ3NvY2tldCddID0gJy92YXIvcnVuL3JlZGlzLnNvY2snOyAvLyBpbiBjYXNlIG9mIGB1bml4YCBzb2NrZXQgdHlwZQorCSRjb25maWdbJ2hvc3QnXSA9ICcxMjcuMC4wLjEnOworCSRjb25maWdbJ3Bhc3N3b3JkJ10gPSBOVUxMOworCSRjb25maWdbJ3BvcnQnXSA9IDYzNzk7CisJJGNvbmZpZ1sndGltZW91dCddID0gMDsKKwogQWxsIG9mIHRoZSBtZXRob2RzIGxpc3RlZCBhYm92ZSBjYW4gYmUgYWNjZXNzZWQgd2l0aG91dCBwYXNzaW5nIGEKIHNwZWNpZmljIGFkYXB0ZXIgdG8gdGhlIGRyaXZlciBsb2FkZXIgYXMgZm9sbG93czo6CiAKIAkkdGhpcy0+bG9hZC0+ZHJpdmVyKCdjYWNoZScpOwogCSR0aGlzLT5jYWNoZS0+cmVkaXMtPnNhdmUoJ2ZvbycsICdiYXInLCAxMCk7CiAKLS4uIGltcG9ydGFudDo6IFJlZGlzIG1heSByZXF1aXJlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKLQkqKmhvc3QqKiwgKipwb3N0KiosICoqdGltZW91dCoqLCAqKnBhc3N3b3JkKiouCi0KLVRoZSBSZWRpcyBQSFAgZXh0ZW5zaW9uIHJlcG9zaXRvcnkgaXMgbG9jYXRlZCBhdAotYGh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFzZmYvcGhwcmVkaXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFzZmYvcGhwcmVkaXM+YF8uCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSZWRpcywgcGxlYXNlIHNlZQorYGh0dHA6Ly9yZWRpcy5pbyA8aHR0cDovL3JlZGlzLmlvPmBfLgogCiBEdW1teSBDYWNoZQogPT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvY2FsZW5kYXIucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9jYWxlbmRhci5yc3QKaW5kZXggZDlhMzM2ZC4uMzg3OTY3MiAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9jYWxlbmRhci5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9jYWxlbmRhci5yc3QKQEAgLTk3LDIxICs5NywyMyBAQAogbW9udGggaGVhZGluZywgYW5kIHRoZSAic2hvcnQiIGRheSBuYW1lcy4gTW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcKIHByZWZlcmVuY2VzIGJlbG93LgogCi09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVByZWZlcmVuY2UgICAgICAgICAgICAgIERlZmF1bHQJCU9wdGlvbnMJCQkJCQlEZXNjcmlwdGlvbgotPT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKnRlbXBsYXRlKiogICAgICAgICAgIAlOb25lCQlOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJQSBzdHJpbmcgY29udGFpbmluZyB5b3VyIGNhbGVuZGFyIHRlbXBsYXRlLgotCQkJCQkJCQkJCQlTZWUgdGhlIHRlbXBsYXRlIHNlY3Rpb24gYmVsb3cuCi0qKmxvY2FsX3RpbWUqKiAgICAgICAgCXRpbWUoKQkJTm9uZQkJCQkJCUEgVW5peCB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCB0aW1lLgotKipzdGFydF9kYXkqKiAgICAgICAgIAlzdW5kYXkJCUFueSB3ZWVrIGRheSAoc3VuZGF5LCBtb25kYXksIHR1ZXNkYXksIGV0Yy4pIAlTZXRzIHRoZSBkYXkgb2YgdGhlIHdlZWsgdGhlIGNhbGVuZGFyIHNob3VsZCBzdGFydCBvbi4KLSoqbW9udGhfdHlwZSoqICAgICAgICAJbG9uZyAgICAgICAgICAJbG9uZywgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlEZXRlcm1pbmVzIHdoYXQgdmVyc2lvbiBvZiB0aGUgbW9udGggbmFtZSB0byB1c2UgaW4gdGhlIGhlYWRlci4KLQkJCQkJCQkJCQkJbG9uZyA9IEphbnVhcnksIHNob3J0ID0gSmFuLgotKipkYXlfdHlwZSoqCQlhYnIJCWxvbmcsIHNob3J0LCBhYnIgCQkJCURldGVybWluZXMgd2hhdCB2ZXJzaW9uIG9mIHRoZSB3ZWVrZGF5IG5hbWVzIHRvIHVzZSBpbgotCQkJCQkJCQkJCQl0aGUgY29sdW1uIGhlYWRlcnMuIGxvbmcgPSBTdW5kYXksIHNob3J0ID0gU3VuLCBhYnIgPSBTdS4KLSoqc2hvd19uZXh0X3ByZXYqKglGQUxTRQkJVFJVRS9GQUxTRSAoYm9vbGVhbikJCQkJRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgbGlua3MgYWxsb3dpbmcgeW91IHRvIHRvZ2dsZQotCQkJCQkJCQkJCQl0byBuZXh0L3ByZXZpb3VzIG1vbnRocy4gU2VlIGluZm9ybWF0aW9uIG9uIHRoaXMgZmVhdHVyZSBiZWxvdy4KLSoqbmV4dF9wcmV2X3VybCoqICAgICAJTm9uZSAgICAgCSAgQSBVUkwJCQkJCQlTZXRzIHRoZSBiYXNlcGF0aCB1c2VkIGluIHRoZSBuZXh0L3ByZXZpb3VzIGNhbGVuZGFyIGxpbmtzLgotPT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ByZWZlcmVuY2UgICAgICAgICAgICAgIERlZmF1bHQgICAgICAgICAgICBPcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKip0ZW1wbGF0ZSoqICAgICAgICAgICAJTm9uZSAgICAgICAgICAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyBjb250YWluaW5nIHlvdXIgY2FsZW5kYXIgdGVtcGxhdGUuCisJCQkJCQkJCQkJCSAgIFNlZSB0aGUgdGVtcGxhdGUgc2VjdGlvbiBiZWxvdy4KKyoqbG9jYWxfdGltZSoqICAgICAgICAJdGltZSgpICAgICAgICAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIFVuaXggdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgdGltZS4KKyoqc3RhcnRfZGF5KiogICAgICAgICAgIHN1bmRheSAgICAgICAgICAgICBBbnkgd2VlayBkYXkgKHN1bmRheSwgbW9uZGF5LCB0dWVzZGF5LCBldGMuKSAgU2V0cyB0aGUgZGF5IG9mIHRoZSB3ZWVrIHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgb24uCisqKm1vbnRoX3R5cGUqKiAgICAgICAgICBsb25nICAgICAgICAgICAgICAgbG9uZywgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgd2hhdCB2ZXJzaW9uIG9mIHRoZSBtb250aCBuYW1lIHRvIHVzZSBpbiB0aGUgaGVhZGVyLgorCQkJCQkJCQkJCQkgICBsb25nID0gSmFudWFyeSwgc2hvcnQgPSBKYW4uCisqKmRheV90eXBlKiogICAgICAgICAgICBhYnIgICAgICAgICAgICAgICAgbG9uZywgc2hvcnQsIGFiciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgd2hhdCB2ZXJzaW9uIG9mIHRoZSB3ZWVrZGF5IG5hbWVzIHRvIHVzZSBpbgorCQkJCQkJCQkJCQkgICB0aGUgY29sdW1uIGhlYWRlcnMuIGxvbmcgPSBTdW5kYXksIHNob3J0ID0gU3VuLCBhYnIgPSBTdS4KKyoqc2hvd19uZXh0X3ByZXYqKiAgICAgIEZBTFNFICAgICAgICAgICAgICBUUlVFL0ZBTFNFIChib29sZWFuKSAgICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgbGlua3MgYWxsb3dpbmcgeW91IHRvIHRvZ2dsZQorCQkJCQkJCQkJCQkgICB0byBuZXh0L3ByZXZpb3VzIG1vbnRocy4gU2VlIGluZm9ybWF0aW9uIG9uIHRoaXMgZmVhdHVyZSBiZWxvdy4KKyoqbmV4dF9wcmV2X3VybCoqICAgICAgIGNvbnRyb2xsZXIvbWV0aG9kICBBIFVSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgYmFzZXBhdGggdXNlZCBpbiB0aGUgbmV4dC9wcmV2aW91cyBjYWxlbmRhciBsaW5rcy4KKyoqc2hvd19vdGhlcl9kYXlzKiogICAgIEZBTFNFICAgICAgICAgICAgICBUUlVFL0ZBTFNFIChib29sZWFuKSAgICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgZGF5cyBvZiBvdGhlciBtb250aHMgdGhhdCBzaGFyZSB0aGUKKwkJCQkJCQkJCQkJICAgZmlyc3Qgb3IgbGFzdCB3ZWVrIG9mIHRoZSBjYWxlbmRhciBtb250aC4KKz09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKIFNob3dpbmcgTmV4dC9QcmV2aW91cyBNb250aCBMaW5rcwpAQCAtMTM0LDcgKzEzNiw4IEBACiAKIC0gIFlvdSBtdXN0IHNldCB0aGUgInNob3dfbmV4dF9wcmV2IiB0byBUUlVFLgogLSAgWW91IG11c3Qgc3VwcGx5IHRoZSBVUkwgdG8gdGhlIGNvbnRyb2xsZXIgY29udGFpbmluZyB5b3VyIGNhbGVuZGFyIGluCi0gICB0aGUgIm5leHRfcHJldl91cmwiIHByZWZlcmVuY2UuCisgICB0aGUgIm5leHRfcHJldl91cmwiIHByZWZlcmVuY2UuIElmIHlvdSBkb24ndCwgaXQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQKKyAgICpjb250cm9sbGVyL21ldGhvZCouCiAtICBZb3UgbXVzdCBzdXBwbHkgdGhlICJ5ZWFyIiBhbmQgIm1vbnRoIiB0byB0aGUgY2FsZW5kYXIgZ2VuZXJhdGluZwogICAgZnVuY3Rpb24gdmlhIHRoZSBVUkkgc2VnbWVudHMgd2hlcmUgdGhleSBhcHBlYXIgKE5vdGU6IFRoZSBjYWxlbmRhcgogICAgY2xhc3MgYXV0b21hdGljYWxseSBhZGRzIHRoZSB5ZWFyL21vbnRoIHRvIHRoZSBiYXNlIFVSTCB5b3UKQEAgLTE2NSw2ICsxNjgsOCBAQAogCiAJICAge2NhbF9yb3dfc3RhcnR9PHRyPnsvY2FsX3Jvd19zdGFydH0KIAkgICB7Y2FsX2NlbGxfc3RhcnR9PHRkPnsvY2FsX2NlbGxfc3RhcnR9CisJICAge2NhbF9jZWxsX3N0YXJ0X3RvZGF5fTx0ZD57L2NhbF9jZWxsX3N0YXJ0X3RvZGF5fQorCSAgIHtjYWxfY2VsbF9zdGFydF9vdGhlcn08dGQgY2xhc3M9Im90aGVyLW1vbnRoIj57L2NhbF9jZWxsX3N0YXJ0X290aGVyfQogCiAJICAge2NhbF9jZWxsX2NvbnRlbnR9PGEgaHJlZj0ie2NvbnRlbnR9Ij57ZGF5fTwvYT57L2NhbF9jZWxsX2NvbnRlbnR9CiAJICAge2NhbF9jZWxsX2NvbnRlbnRfdG9kYXl9PGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij48YSBocmVmPSJ7Y29udGVudH0iPntkYXl9PC9hPjwvZGl2PnsvY2FsX2NlbGxfY29udGVudF90b2RheX0KQEAgLTE3NCw3ICsxNzksMTEgQEAKIAogCSAgIHtjYWxfY2VsbF9ibGFua30mbmJzcDt7L2NhbF9jZWxsX2JsYW5rfQogCisJICAge2NhbF9jZWxsX290aGVyfXtkYXl9e2NhbF9jZWxfb3RoZXJ9CisKIAkgICB7Y2FsX2NlbGxfZW5kfTwvdGQ+ey9jYWxfY2VsbF9lbmR9CisJICAge2NhbF9jZWxsX2VuZF90b2RheX08L3RkPnsvY2FsX2NlbGxfZW5kX3RvZGF5fQorCSAgIHtjYWxfY2VsbF9lbmRfb3RoZXJ9PC90ZD57L2NhbF9jZWxsX2VuZF9vdGhlcn0KIAkgICB7Y2FsX3Jvd19lbmR9PC90cj57L2NhbF9yb3dfZW5kfQogCiAJICAge3RhYmxlX2Nsb3NlfTwvdGFibGU+ey90YWJsZV9jbG9zZX0KZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvY29uZmlnLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvY29uZmlnLnJzdAppbmRleCA1NGFhNzBiLi44NjYzMzI0IDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2NvbmZpZy5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9jb25maWcucnN0CkBAIC05OSw3ICs5OSw3IEBACiAKIAkkbGFuZyA9ICR0aGlzLT5jb25maWctPml0ZW0oJ2xhbmd1YWdlJyk7CiAKLVRoZSBmdW5jdGlvbiByZXR1cm5zIEZBTFNFIChib29sZWFuKSBpZiB0aGUgaXRlbSB5b3UgYXJlIHRyeWluZyB0byBmZXRjaAorVGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCBpZiB0aGUgaXRlbSB5b3UgYXJlIHRyeWluZyB0byBmZXRjaAogZG9lcyBub3QgZXhpc3QuCiAKIElmIHlvdSBhcmUgdXNpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgdGhlICR0aGlzLT5jb25maWctPmxvYWQKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvZW1haWwucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9lbWFpbC5yc3QKaW5kZXggMWQ5ZDJjMS4uZWM2Mzk4NCAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9lbWFpbC5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9lbWFpbC5yc3QKQEAgLTI1NCw3ICsyNTQsNiBAQAogCQltZXNzYWdlIENvZGVJZ25pdGVyIHdpbGwgZXh0cmFjdCB0aGUgbWVzc2FnZSBmcm9tIHlvdXIgSFRNTCBlbWFpbAogCQlhbmQgc3RyaXAgdGhlIHRhZ3MuCiAKLQogCS4uIG1ldGhvZDo6IHNldF9oZWFkZXIoJGhlYWRlciwgJHZhbHVlKQogCiAJCTpwYXJhbSBzdHJpbmcgJGhlYWRlcjogaGVhZGVyIG5hbWUKQEAgLTMzMCw4ICszMjksOCBAQAogCQk6cmV0dXJuczogQ0lfRW1haWwgb2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcKIAogCQlFbmFibGVzIHlvdSB0byBzZW5kIGFuIGF0dGFjaG1lbnQuIFB1dCB0aGUgZmlsZSBwYXRoL25hbWUgaW4gdGhlIGZpcnN0Ci0JCXBhcmFtZXRlci4gTm90ZTogVXNlIGEgZmlsZSBwYXRoLCBub3QgYSBVUkwuIEZvciBtdWx0aXBsZSBhdHRhY2htZW50cwotCQl1c2UgdGhlIG1ldGhvZCBtdWx0aXBsZSB0aW1lcy4gRm9yIGV4YW1wbGU6OgorCQlwYXJhbWV0ZXIuIEZvciBtdWx0aXBsZSBhdHRhY2htZW50cyB1c2UgdGhlIG1ldGhvZCBtdWx0aXBsZSB0aW1lcy4KKwkJRm9yIGV4YW1wbGU6OgogCiAJCQkkdGhpcy0+ZW1haWwtPmF0dGFjaCgnL3BhdGgvdG8vcGhvdG8xLmpwZycpOwogCQkJJHRoaXMtPmVtYWlsLT5hdHRhY2goJy9wYXRoL3RvL3Bob3RvMi5qcGcnKTsKQEAgLTM0Miw2ICszNDEsMTAgQEAKIAogCQkJJHRoaXMtPmVtYWlsLT5hdHRhY2goJ2ltYWdlLmpwZycsICdpbmxpbmUnKTsKIAorCQlZb3UgY2FuIGFsc28gdXNlIGEgVVJMOjoKKworCQkJJHRoaXMtPmVtYWlsLT5hdHRhY2goJ2h0dHA6Ly9leGFtcGxlLmNvbS9maWxlbmFtZS5wZGYnKTsKKwogCQlJZiB5b3UnZCBsaWtlIHRvIHVzZSBhIGN1c3RvbSBmaWxlIG5hbWUsIHlvdSBjYW4gdXNlIHRoZSB0aGlyZCBwYXJhbWF0ZXI6OgogCiAJCQkkdGhpcy0+ZW1haWwtPmF0dGFjaCgnZmlsZW5hbWUucGRmJywgJ2F0dGFjaG1lbnQnLCAncmVwb3J0LnBkZicpOwpAQCAtMzUyLDYgKzM1NSwyNiBAQAogCiAJCQkkdGhpcy0+ZW1haWwtPmF0dGFjaCgkYnVmZmVyLCAnYXR0YWNobWVudCcsICdyZXBvcnQucGRmJywgJ2FwcGxpY2F0aW9uL3BkZicpOwogCisJLi4gbWV0aG9kOjogYXR0YWNobWVudF9jaWQoJGZpbGVuYW1lKQorCisJCTpwYXJhbSBzdHJpbmcgJGZpbGVuYW1lOiBFeGlzdGluZyBhdHRhY2htZW50IGZpbGVuYW1lCisJCTpyZXR1cm5zOiBzdHJpbmcKKyAKKwkJU2V0cyBhbmQgcmV0dXJucyBhbiBhdHRhY2htZW50J3MgQ29udGVudC1JRCwgd2hpY2ggZW5hYmxlcyB5b3VyIHRvIGVtYmVkIGFuIGlubGluZQorCQkocGljdHVyZSkgYXR0YWNobWVudCBpbnRvIEhUTUwuIEZpcnN0IHBhcmFtZXRlciBtdXN0IGJlIHRoZSBhbHJlYWR5IGF0dGFjaGVkIGZpbGUgbmFtZS4KKwkJOjoKKyAKKwkJCSRmaWxlbmFtZSA9ICcvaW1nL3Bob3RvMS5qcGcnOworCQkJJHRoaXMtPmVtYWlsLT5hdHRhY2goJGZpbGVuYW1lKTsKKwkJCWZvcmVhY2ggKCRsaXN0IGFzICRhZGRyZXNzKQorCQkJeworCQkJCSR0aGlzLT5lbWFpbC0+dG8oJGFkZHJlc3MpOworCQkJCSRjaWQgPSAkdGhpcy0+ZW1haWwtPmF0dGFjaF9jaWQoJGZpbGVuYW1lKTsKKwkJCQkkdGhpcy0+ZW1haWwtPm1lc3NhZ2UoJzxpbWcgc3JjPSdjaWQ6Ii4gJGNpZCAuIicgYWx0PSJwaG90bzEiIC8+Jyk7CisJCQkJJHRoaXMtPmVtYWlsLT5zZW5kKCk7CisJCQl9CisKKwkJLi4gbm90ZTo6IENvbnRlbnQtSUQgZm9yIGVhY2ggZS1tYWlsIG11c3QgYmUgcmUtY3JlYXRlZCBmb3IgaXQgdG8gYmUgdW5pcXVlLgogCiAJLi4gbWV0aG9kOjogcHJpbnRfZGVidWdnZXIoWyRpbmNsdWRlID0gYXJyYXkoJ2hlYWRlcnMnLCAnc3ViamVjdCcsICdib2R5JyldKQogCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2ZpbGVfdXBsb2FkaW5nLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvZmlsZV91cGxvYWRpbmcucnN0CmluZGV4IDY5NTk5OGQuLmQ2NzlkOGEgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvZmlsZV91cGxvYWRpbmcucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvZmlsZV91cGxvYWRpbmcucnN0CkBAIC05MCw3ICs5MCw3IEBACiBUaGUgQ29udHJvbGxlcgogPT09PT09PT09PT09PT0KIAotVXNpbmcgYSB0ZXh0IGVkaXRvciwgY3JlYXRlIGEgY29udHJvbGxlciBjYWxsZWQgdXBsb2FkLnBocC4gSW4gaXQsIHBsYWNlCitVc2luZyBhIHRleHQgZWRpdG9yLCBjcmVhdGUgYSBjb250cm9sbGVyIGNhbGxlZCBVcGxvYWQucGhwLiBJbiBpdCwgcGxhY2UKIHRoaXMgY29kZSBhbmQgc2F2ZSBpdCB0byB5b3VyICoqYXBwbGljYXRpb24vY29udHJvbGxlcnMvKiogZGlyZWN0b3J5OjoKIAogCTw/cGhwCkBAIC0yMzEsNiArMjMxLDExIEBACiAqKmRldGVjdF9taW1lKiogICAgICAgICAgICAgIFRSVUUgICAgICAgICAgICAgIFRSVUUvRkFMU0UgKGJvb2xlYW4pICAgIElmIHNldCB0byBUUlVFLCBhIHNlcnZlciBzaWRlIGRldGVjdGlvbiBvZiB0aGUgZmlsZSB0eXBlIHdpbGwgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWVkIHRvIGF2b2lkIGNvZGUgaW5qZWN0aW9uIGF0dGFja3MuIERPIE5PVCBkaXNhYmxlIHRoaXMgb3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyB5b3UgaGF2ZSBubyBvdGhlciBvcHRpb24gYXMgdGhhdCB3b3VsZCBjYXVzZSBhIHNlY3VyaXR5IHJpc2suCisqKm1vZF9taW1lX2ZpeCoqICAgICAgICAgICAgIFRSVUUgICAgICAgICAgICAgIFRSVUUvRkFMU0UgKGJvb2xlYW4pICAgIElmIHNldCB0byBUUlVFLCBtdWx0aXBsZSBmaWxlbmFtZSBleHRlbnNpb25zIHdpbGwgYmUgc3VmZml4ZWQgd2l0aCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcnNjb3JlIGluIG9yZGVyIHRvIGF2b2lkIHRyaWdnZXJpbmcgYEFwYWNoZSBtb2RfbWltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjAvbW9kL21vZF9taW1lLmh0bWwjbXVsdGlwbGVleHQ+YF8uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPIE5PVCB0dXJuIG9mZiB0aGlzIG9wdGlvbiBpZiB5b3VyIHVwbG9hZCBkaXJlY3RvcnkgaXMgcHVibGljLCBhcyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGEgc2VjdXJpdHkgcmlzay4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBTZXR0aW5nIHByZWZlcmVuY2VzIGluIGEgY29uZmlnIGZpbGUKQEAgLTM0MCw0ICszNDUsNCBAQAogCQkJaW1hZ2VfaGVpZ2h0CQkJSW1hZ2UgaGVpZ2h0CiAJCQlpbWFnZV90eXBlCQkJCUltYWdlIHR5cGUuIFR5cGljYWxseSB0aGUgZmlsZSBleHRlbnNpb24gd2l0aG91dCB0aGUgcGVyaW9kLgogCQkJaW1hZ2Vfc2l6ZV9zdHIJCUEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQuIFVzZWZ1bCB0byBwdXQgaW50byBhbiBpbWFnZSB0YWcuCi0JCQk9PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwkJCT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2Zvcm1fdmFsaWRhdGlvbi5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2Zvcm1fdmFsaWRhdGlvbi5yc3QKaW5kZXggMzVmNzQ1Zi4uNDI0MjJmOSAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9mb3JtX3ZhbGlkYXRpb24ucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvZm9ybV92YWxpZGF0aW9uLnJzdApAQCAtMjAwLDYgKzIwMCw3IEBACiAgICBtZXNzYWdlLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBmaWVsZCBpcyBuYW1lZCAidXNlciIgeW91IG1pZ2h0IGdpdmUgaXQKICAgIGEgaHVtYW4gbmFtZSBvZiAiVXNlcm5hbWUiLgogIy4gVGhlIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZm9ybSBmaWVsZC4KKyMuIChvcHRpb25hbCkgU2V0IGN1c3RvbSBlcnJvciBtZXNzYWdlcyBvbiBhbnkgcnVsZXMgZ2l2ZW4gZm9yIGN1cnJlbnQgZmllbGQuIElmIG5vdCBwcm92aWRlZCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBvbmUuCiAKIC4uIG5vdGU6OiBJZiB5b3Ugd291bGQgbGlrZSB0aGUgZmllbGQgbmFtZSB0byBiZSBzdG9yZWQgaW4gYSBsYW5ndWFnZQogCWZpbGUsIHBsZWFzZSBzZWUgOnJlZjpgdHJhbnNsYXRpbmctZmllbGQtbmFtZXNgLgpAQCAtMjI1LDcgKzIyNiw5IEBACiAJCQkkdGhpcy0+bG9hZC0+bGlicmFyeSgnZm9ybV92YWxpZGF0aW9uJyk7CiAKIAkJCSR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygndXNlcm5hbWUnLCAnVXNlcm5hbWUnLCAncmVxdWlyZWQnKTsKLQkJCSR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygncGFzc3dvcmQnLCAnUGFzc3dvcmQnLCAncmVxdWlyZWQnKTsKKwkJCSR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygncGFzc3dvcmQnLCAnUGFzc3dvcmQnLCAncmVxdWlyZWQnLAorCQkJCWFycmF5KCdyZXF1aXJlZCcgPT4gJ1lvdSBtdXN0IHByb3ZpZGUgYSAlcy4nKQorCQkJKTsKIAkJCSR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygncGFzc2NvbmYnLCAnUGFzc3dvcmQgQ29uZmlybWF0aW9uJywgJ3JlcXVpcmVkJyk7CiAJCQkkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJ2VtYWlsJywgJ0VtYWlsJywgJ3JlcXVpcmVkJyk7CiAKQEAgLTI2Myw3ICsyNjYsMTAgQEAKIAkJYXJyYXkoCiAJCQknZmllbGQnID0+ICdwYXNzd29yZCcsCiAJCQknbGFiZWwnID0+ICdQYXNzd29yZCcsCi0JCQkncnVsZXMnID0+ICdyZXF1aXJlZCcKKwkJCSdydWxlcycgPT4gJ3JlcXVpcmVkJywKKwkJCSdlcnJvcnMnID0+IGFycmF5KAorCQkJCSdyZXF1aXJlZCcgPT4gJ1lvdSBtdXN0IHByb3ZpZGUgYSAlcy4nLAorCQkJKSwKIAkJKSwKIAkJYXJyYXkoCiAJCQknZmllbGQnID0+ICdwYXNzY29uZicsCkBAIC0yODUsNyArMjkxLDE0IEBACiBDb2RlSWduaXRlciBsZXRzIHlvdSBwaXBlIG11bHRpcGxlIHJ1bGVzIHRvZ2V0aGVyLiBMZXQncyB0cnkgaXQuIENoYW5nZQogeW91ciBydWxlcyBpbiB0aGUgdGhpcmQgcGFyYW1ldGVyIG9mIHJ1bGUgc2V0dGluZyBtZXRob2QsIGxpa2UgdGhpczo6CiAKLQkkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJ3VzZXJuYW1lJywgJ1VzZXJuYW1lJywgJ3JlcXVpcmVkfG1pbl9sZW5ndGhbNV18bWF4X2xlbmd0aFsxMl18aXNfdW5pcXVlW3VzZXJzLnVzZXJuYW1lXScpOworCSR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygKKwkJJ3VzZXJuYW1lJywgJ1VzZXJuYW1lJywKKwkJJ3JlcXVpcmVkfG1pbl9sZW5ndGhbNV18bWF4X2xlbmd0aFsxMl18aXNfdW5pcXVlW3VzZXJzLnVzZXJuYW1lXScsCisJCWFycmF5KAorCQkJJ3JlcXVpcmVkJwk9PiAnWW91IGhhdmUgbm90IHByb3ZpZGVkICVzLicsCisJCQknaXNfdW5pcXVlJwk9PiAnVGhpcyAlcyBhbHJlYWR5IGV4aXN0cy4nCisJCSkKKwkpOwogCSR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygncGFzc3dvcmQnLCAnUGFzc3dvcmQnLCAncmVxdWlyZWQnKTsKIAkkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJ3Bhc3Njb25mJywgJ1Bhc3N3b3JkIENvbmZpcm1hdGlvbicsICdyZXF1aXJlZHxtYXRjaGVzW3Bhc3N3b3JkXScpOwogCSR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygnZW1haWwnLCAnRW1haWwnLCAncmVxdWlyZWR8dmFsaWRfZW1haWx8aXNfdW5pcXVlW3VzZXJzLmVtYWlsXScpOwpAQCAtNDMxLDcgKzQ0NCw3IEBACiAJCQl9CiAJCX0KIAotCQlwcm90ZWN0ZWQgZnVuY3Rpb24gdXNlcm5hbWVfY2hlY2soJHN0cikKKwkJcHVibGljIGZ1bmN0aW9uIHVzZXJuYW1lX2NoZWNrKCRzdHIpCiAJCXsKIAkJCWlmICgkc3RyID09ICd0ZXN0JykKIAkJCXsKQEAgLTQ2OSwxMSArNDgyLDE4IEBACiBBbGwgb2YgdGhlIG5hdGl2ZSBlcnJvciBtZXNzYWdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgZm9sbG93aW5nIGxhbmd1YWdlCiBmaWxlOiAqKnN5c3RlbS9sYW5ndWFnZS9lbmdsaXNoL2Zvcm1fdmFsaWRhdGlvbl9sYW5nLnBocCoqCiAKLVRvIHNldCB5b3VyIG93biBjdXN0b20gbWVzc2FnZSB5b3UgY2FuIGVpdGhlciBlZGl0IHRoYXQgZmlsZSwgb3IgdXNlIHRoZQotZm9sbG93aW5nIG1ldGhvZDo6CitUbyBzZXQgeW91ciBvd24gZ2xvYmFsIGN1c3RvbSBtZXNzYWdlIGZvciBhIHJ1bGUsIHlvdSBjYW4gZWl0aGVyIAorZWRpdCB0aGF0IGZpbGUsIG9yIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZDo6CiAKIAkkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfbWVzc2FnZSgncnVsZScsICdFcnJvciBNZXNzYWdlJyk7CiAKK0lmIHlvdSBuZWVkIHRvIHNldCBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIGZvciBhIHBhcnRpY3VsYXIgZmllbGQgb24gCitzb21lIHBhcnRpY3VsYXIgcnVsZSwgdXNlIHRoZSBzZXRfcnVsZXMoKSBtZXRob2Q6OgorCisJJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCdmaWVsZF9uYW1lJywgJ0ZpZWxkIExhYmVsJywgJ3J1bGUxfHJ1bGUyfHJ1bGUzJywKKwkJYXJyYXkoJ3J1bGUyJwk9PiAnRXJyb3IgTWVzc2FnZSBvbiBydWxlMiBmb3IgdGhpcyBmaWVsZF9uYW1lJykKKwkpOworCiBXaGVyZSBydWxlIGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lIG9mIGEgcGFydGljdWxhciBydWxlLCBhbmQgRXJyb3IKIE1lc3NhZ2UgaXMgdGhlIHRleHQgeW91IHdvdWxkIGxpa2UgZGlzcGxheWVkLgogCkBAIC04NjYsNyArODg2LDggQEAKICoqaXNfdW5pcXVlKiogICAgICAgICAgICAgWWVzICAgICAgICBSZXR1cm5zIEZBTFNFIGlmIHRoZSBmb3JtIGVsZW1lbnQgaXMgbm90IHVuaXF1ZSB0byB0aGUgdGFibGUgYW5kIGZpZWxkIG5hbWUgaW4gdGhlICAgICAgICAgICAgaXNfdW5pcXVlW3RhYmxlLmZpZWxkXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gTm90ZTogVGhpcyBydWxlIHJlcXVpcmVzIDpkb2M6YFF1ZXJ5IEJ1aWxkZXIgPC4uL2RhdGFiYXNlL3F1ZXJ5X2J1aWxkZXI+YCB0byBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgaW4gb3JkZXIgdG8gd29yay4KLSoqbWF4X2xlbmd0aCoqICAgICAgICAgICAgWWVzICAgICAgICBSZXR1cm5zIEZBTFNFIGlmIHRoZSBmb3JtIGVsZW1lbnQgaXMgbG9uZ2VyIHRoZW4gdGhlIHBhcmFtZXRlciB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlbmd0aFsxMl0KKyoqbWluX2xlbmd0aCoqICAgICAgICAgICAgWWVzICAgICAgICBSZXR1cm5zIEZBTFNFIGlmIHRoZSBmb3JtIGVsZW1lbnQgaXMgc2hvcnRlciB0aGFuIHRoZSBwYXJhbWV0ZXIgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgbWluX2xlbmd0aFszXQorKiptYXhfbGVuZ3RoKiogICAgICAgICAgICBZZXMgICAgICAgIFJldHVybnMgRkFMU0UgaWYgdGhlIGZvcm0gZWxlbWVudCBpcyBsb25nZXIgdGhhbiB0aGUgcGFyYW1ldGVyIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuZ3RoWzEyXQogKipleGFjdF9sZW5ndGgqKiAgICAgICAgICBZZXMgICAgICAgIFJldHVybnMgRkFMU0UgaWYgdGhlIGZvcm0gZWxlbWVudCBpcyBub3QgZXhhY3RseSB0aGUgcGFyYW1ldGVyIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdF9sZW5ndGhbOF0KICoqZ3JlYXRlcl90aGFuKiogICAgICAgICAgWWVzICAgICAgICBSZXR1cm5zIEZBTFNFIGlmIHRoZSBmb3JtIGVsZW1lbnQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWUgb3Igbm90ICAgICAgICAgZ3JlYXRlcl90aGFuWzhdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYy4KZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvaW5wdXQucnN0IGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9pbnB1dC5yc3QKaW5kZXggZjVhYjA0OC4uOGE4MzIwNyAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9pbnB1dC5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9pbnB1dC5yc3QKQEAgLTMyLDcgKzMyLDggQEAKICAgIChhbmQgYSBmZXcgb3RoZXIpIGNoYXJhY3RlcnMuCiAtICBQcm92aWRlcyBYU1MgKENyb3NzLXNpdGUgU2NyaXB0aW5nIEhhY2tzKSBmaWx0ZXJpbmcuIFRoaXMgY2FuIGJlCiAgICBlbmFibGVkIGdsb2JhbGx5LCBvciB1cG9uIHJlcXVlc3QuCi0tICBTdGFuZGFyZGl6ZXMgbmV3bGluZSBjaGFyYWN0ZXJzIHRvIFxcbihJbiBXaW5kb3dzIFxcclxcbikKKy0gIFN0YW5kYXJkaXplcyBuZXdsaW5lIGNoYXJhY3RlcnMgdG8gYGBQSFBfRU9MYGAgKFxcbiBpbiBVTklYLWJhc2VkIE9TZXMsCisgICBcXHJcXG4gdW5kZXIgV2luZG93cykuIFRoaXMgaXMgY29uZmlndXJhYmxlLgogCiBYU1MgRmlsdGVyaW5nCiA9PT09PT09PT09PT09CkBAIC0xNTUsMTggKzE1NiwzMiBAQAogCQkJJHRoaXMtPmlucHV0LT5nZXQoTlVMTCwgVFJVRSk7IC8vIHJldHVybnMgYWxsIEdFVCBpdGVtcyB3aXRoIFhTUyBmaWx0ZXIKIAkJCSR0aGlzLT5pbnB1dC0+Z2V0KE5VTEwsIEZBTFNFKTsgLy8gcmV0dXJucyBhbGwgR0VUIGl0ZW1zIHdpdGhvdXQgWFNTIGZpbHRlcmluZwogCisJLi4gbWV0aG9kOjogcG9zdF9nZXQoWyRpbmRleCA9ICcnWywgJHhzc19jbGVhbiA9IE5VTExdXSkKKworCQk6cGFyYW0gc3RyaW5nICRpbmRleDogUE9TVC9HRVQgcGFyYW1ldGVyIG5hbWUKKwkJOnBhcmFtIGJvb2wgJHhzc19jbGVhbjogV2hldGhlciB0byBhcHBseSBYU1MgZmlsdGVyaW5nCisJCTpyZXR1cm5zOiBtaXhlZAorCisJCVRoaXMgbWV0aG9kIHdvcmtzIHRoZSBzYW1lIHdheSBhcyBgYHBvc3QoKWBgIGFuZCBgYGdldCgpYGAsIG9ubHkgY29tYmluZWQuCisJCUl0IHdpbGwgc2VhcmNoIHRocm91Z2ggYm90aCBQT1NUIGFuZCBHRVQgc3RyZWFtcyBmb3IgZGF0YSwgbG9va2luZyBpbiBQT1NUCisJCWZpcnN0LCBhbmQgdGhlbiBpbiBHRVQ6OgorCisJCQkkdGhpcy0+aW5wdXQtPnBvc3RfZ2V0KCdzb21lX2RhdGEnLCBUUlVFKTsKKwogCS4uIG1ldGhvZDo6IGdldF9wb3N0KFskaW5kZXggPSAnJ1ssICR4c3NfY2xlYW4gPSBOVUxMXV0pCiAKIAkJOnBhcmFtIHN0cmluZyAkaW5kZXg6IEdFVC9QT1NUIHBhcmFtZXRlciBuYW1lCiAJCTpwYXJhbSBib29sICR4c3NfY2xlYW46IFdoZXRoZXIgdG8gYXBwbHkgWFNTIGZpbHRlcmluZwogCQk6cmV0dXJuczogbWl4ZWQKIAotCQlUaGlzIG1ldGhvZCB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgYGBwb3N0KClgYCBhbmQgYGBnZXQoKWBgLCBvbmx5IGNvbWJpbmVkLgotCQlJdCB3aWxsIHNlYXJjaCB0aHJvdWdoIGJvdGggUE9TVCBhbmQgR0VUIHN0cmVhbXMgZm9yIGRhdGEsIGxvb2tpbmcgZmlyc3QKLQkJaW4gUE9TVCwgYW5kIHRoZW4gaW4gR0VUOjoKKwkJVGhpcyBtZXRob2Qgd29ya3MgdGhlIHNhbWUgd2F5IGFzIGBgcG9zdF9nZXQoKWBgIG9ubHkgaXQgbG9va3MgZm9yIEdFVAorCQlkYXRhIGZpcnN0LgogCiAJCQkkdGhpcy0+aW5wdXQtPmdldF9wb3N0KCdzb21lX2RhdGEnLCBUUlVFKTsKIAorCQkuLiBub3RlOjogVGhpcyBtZXRob2QgdXNlZCB0byBhY3QgRVhBQ1RMWSBsaWtlIGBgcG9zdF9nZXQoKWBgLCBidXQgaXQncworCQkJYmVoYXZpb3IgaGFzIGNoYW5nZWQgaW4gQ29kZUlnbml0ZXIgMy4wLgorCiAJLi4gbWV0aG9kOjogY29va2llKFskaW5kZXggPSAnJ1ssICR4c3NfY2xlYW4gPSBOVUxMXV0pCiAKIAkJOnBhcmFtIHN0cmluZyAkaW5kZXg6IENPT0tJRSBwYXJhbWV0ZXIgbmFtZQpAQCAtMzYyLDYgKzM3Nyw5IEBACiAKIAkJCSR0aGlzLT5pbnB1dC0+aXNfY2xpX3JlcXVlc3QoKQogCisJCS4uIG5vdGU6OiBUaGlzIG1ldGhvZCBpcyBERVBSRUNBVEVEIGFuZCBpcyBub3cganVzdCBhbiBhbGlhcyBmb3IgdGhlCisJCQk6ZnVuYzpgaXNfY2xpKClgIGZ1bmN0aW9uLgorCiAJLi4gbWV0aG9kOjogbWV0aG9kKFskdXBwZXIgPSBGQUxTRV0pCiAKIAkJOnBhcmFtIGJvb2wgJHVwcGVyOiBXaGV0aGVyIHRvIHJldHVybiB0aGUgcmVxdWVzdCBtZXRob2QgbmFtZSBpbiB1cHBlciBvciBsb3dlciBjYXNlCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2xvYWRlci5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL2xvYWRlci5yc3QKaW5kZXggZWM1YTg3Yi4uMTVkOWQ4MCAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9sb2FkZXIucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvbG9hZGVyLnJzdApAQCAtMjc4LDYgKzI3OCwxMiBAQAogCiAJCVRoaXMgbWV0aG9kIHJldHJpZXZlcyBhbGwgdmFyaWFibGVzIGF2YWlsYWJsZSB0byB5b3VyIHZpZXdzLgogCisJLi4gbWV0aG9kOjogY2xlYXJfdmFycygpCisKKwkJOnJldHVybnM6IG9iamVjdAorCisJCUNsZWFycyBjYWNoZWQgdmlldyB2YXJpYWJsZXMuCisKIAkuLiBtZXRob2Q6OiBtb2RlbCgkbW9kZWxbLCAkbmFtZSA9ICcnWywgJGRiX2Nvbm4gPSBGQUxTRV1dKQogCiAJCTpwYXJhbSBtaXhlZCAkbW9kZWw6IE1vZGVsIG5hbWUgb3IgYW4gYXJyYXkgY29udGFpbmluZyBtdWx0aXBsZSBtb2RlbHMKQEAgLTI5Miw3ICsyOTgsNyBAQAogCiAJCUlmIHlvdXIgbW9kZWwgaXMgbG9jYXRlZCBpbiBhIHN1YmRpcmVjdG9yeSwgaW5jbHVkZSB0aGUgcmVsYXRpdmUgcGF0aAogCQlmcm9tIHlvdXIgbW9kZWxzIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgbW9kZWwgbG9jYXRlZCBhdAotCQkqYXBwbGljYXRpb24vbW9kZWxzL2Jsb2cvcXVlcmllcy5waHAqIHlvdSdsbCBsb2FkIGl0IHVzaW5nOjoKKwkJKmFwcGxpY2F0aW9uL21vZGVscy9ibG9nL1F1ZXJpZXMucGhwKiB5b3UnbGwgbG9hZCBpdCB1c2luZzo6CiAKIAkJCSR0aGlzLT5sb2FkLT5tb2RlbCgnYmxvZy9xdWVyaWVzJyk7CiAKQEAgLTM3MCw2ICszNzYsMzMgQEAKIAkJVGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgb2YgdGhlIDpkb2M6YGNvbmZpZyBmaWxlIGxvYWRpbmcKIAkJbWV0aG9kIDxjb25maWc+YDogYGAkdGhpcy0+Y29uZmlnLT5sb2FkKClgYAogCisJLi4gbWV0aG9kOjogaXNfbG9hZGVkKCRjbGFzcykKKworCQk6cGFyYW0gc3RyaW5nICRjbGFzczogQ2xhc3MgbmFtZQorCQk6cmV0dXJuczogbWl4ZWQKKworCQlBbGxvd3MgeW91IHRvIGNoZWNrIGlmIGEgY2xhc3MgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQgb3Igbm90LgorCisJCS4uIG5vdGU6OiBUaGUgd29yZCAiY2xhc3MiIGhlcmUgcmVmZXJzIHRvIGxpYnJhcmllcyBhbmQgZHJpdmVycy4KKworCQlJZiB0aGUgcmVxdWVzdGVkIGNsYXNzIGhhcyBiZWVuIGxvYWRlZCwgdGhlIG1ldGhvZCByZXR1cm5zIGl0cyBhc3NpZ25lZAorCQluYW1lIGluIHRoZSBDSSBTdXBlci1vYmplY3QgYW5kIEZBTFNFIGlmIGl0J3Mgbm90OjoKKworCQkJJHRoaXMtPmxvYWQtPmxpYnJhcnkoJ2Zvcm1fdmFsaWRhdGlvbicpOworCQkJJHRoaXMtPmxvYWQtPmlzX2xvYWRlZCgnRm9ybV92YWxpZGF0aW9uJyk7CS8vIHJldHVybnMgJ2Zvcm1fdmFsaWRhdGlvbicKKworCQkJJHRoaXMtPmxvYWQtPmlzX2xvYWRlZCgnTm9uZXhpc3RlbnRfbGlicmFyeScpOwkvLyByZXR1cm5zIEZBTFNFCisKKwkJLi4gaW1wb3J0YW50OjogSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiBhIGNsYXNzIChhc3NpZ25lZCB0bworCQkJZGlmZmVyZW50IHByb3BlcnRpZXMpLCB0aGVuIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSByZXR1cm5lZC4KKworCQk6OgorCisJCQkkdGhpcy0+bG9hZC0+bGlicmFyeSgnZm9ybV92YWxpZGF0aW9uJywgJGNvbmZpZywgJ2Z2Jyk7CisJCQkkdGhpcy0+bG9hZC0+bGlicmFyeSgnZm9ybV92YWxpZGF0aW9uJyk7CisKKwkJCSR0aGlzLT5sb2FkLT5pc19sb2FkZWQoJ0Zvcm1fdmFsaWRhdGlvbicpOwkvLyByZXR1cm5zICdmdicKKwogCS4uIG1ldGhvZDo6IGFkZF9wYWNrYWdlX3BhdGgoJHBhdGhbLCAkdmlld19jYXNjYWRlID0gVFJVRV0pCiAKIAkJOnBhcmFtIHN0cmluZyAkcGF0aDogUGF0aCB0byBhZGQKZGlmZiAtLWdpdCBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvbWlncmF0aW9uLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvbWlncmF0aW9uLnJzdAppbmRleCAxMjg3OTZjLi40MTQzNjA5IDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL21pZ3JhdGlvbi5yc3QKKysrIGIvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy9taWdyYXRpb24ucnN0CkBAIC05NCw3ICs5NCw3IEBACiBVc2FnZSBFeGFtcGxlCiAqKioqKioqKioqKioqCiAKLUluIHRoaXMgZXhhbXBsZSBzb21lIHNpbXBsZSBjb2RlIGlzIHBsYWNlZCBpbiAqKmFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL21pZ3JhdGUucGhwKiogCitJbiB0aGlzIGV4YW1wbGUgc29tZSBzaW1wbGUgY29kZSBpcyBwbGFjZWQgaW4gKiphcHBsaWNhdGlvbi9jb250cm9sbGVycy9NaWdyYXRlLnBocCoqIAogdG8gdXBkYXRlIHRoZSBzY2hlbWEuOjoKIAogCTw/cGhwCkBAIC0xNzUsNCArMTc1LDQgQEAKIAkJc3BlY2lmaWMgdmVyc2lvbnMuIEl0IHdvcmtzIGp1c3QgbGlrZSBgYGN1cnJlbnQoKWBgIGJ1dCBpZ25vcmVzIGBgJGNvbmZpZ1snbWlncmF0aW9uX3ZlcnNpb24nXWBgLgogCQk6OgogCi0JCQkkdGhpcy0+bWlncmF0aW9uLT52ZXJzaW9uKDUpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwkJCSR0aGlzLT5taWdyYXRpb24tPnZlcnNpb24oNSk7CmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL3NlY3VyaXR5LnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvc2VjdXJpdHkucnN0CmluZGV4IDhkN2NjYjEuLjQ1MWZhZGYgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvc2VjdXJpdHkucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvc2VjdXJpdHkucnN0CkBAIC02NywxMiArNjcsMTMgQEAKIAogSWYgeW91IHVzZSB0aGUgOmRvYzpgZm9ybSBoZWxwZXIgPC4uL2hlbHBlcnMvZm9ybV9oZWxwZXI+YCwgdGhlbgogOmZ1bmM6YGZvcm1fb3BlbigpYCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zZXJ0IGEgaGlkZGVuIGNzcmYgZmllbGQgaW4KLXlvdXIgZm9ybXMuIElmIG5vdCwgdGhlbiB5b3UgY2FuIHVzZSBgYGNzcmZfZ2V0X3Rva2VuX25hbWUoKWBgIGFuZCBgYGNzcmZfZ2V0X2hhc2goKWBgCit5b3VyIGZvcm1zLiBJZiBub3QsIHRoZW4geW91IGNhbiB1c2UgYGBnZXRfY3NyZl90b2tlbl9uYW1lKClgYAorYW5kIGBgZ2V0X2NzcmZfaGFzaCgpYGAKIDo6CiAKIAkkY3NyZiA9IGFycmF5KAotCQknbmFtZScgPT4gJHRoaXMtPnNlY3VyaXR5LT5jc3JmX2dldF90b2tlbl9uYW1lKCksCi0JCSdoYXNoJyA9PiAkdGhpcy0+c2VjdXJpdHktPmNzcmZfZ2V0X2hhc2goKQorCQknbmFtZScgPT4gJHRoaXMtPnNlY3VyaXR5LT5nZXRfY3NyZl90b2tlbl9uYW1lKCksCisJCSdoYXNoJyA9PiAkdGhpcy0+c2VjdXJpdHktPmdldF9jc3JmX2hhc2goKQogCSk7CiAKIAkuLi4KQEAgLTE0OSw0ICsxNTAsNCBAQAogCQlUaGlzIG1ldGhvZCBhY3RzIGEgbG90IGxpa2UgUEhQJ3Mgb3duIG5hdGl2ZSBgYGh0bWxfZW50aXR5X2RlY29kZSgpYGAgZnVuY3Rpb24gaW4gRU5UX0NPTVBBVCBtb2RlLCBvbmx5CiAJCWl0IHRyaWVzIHRvIGRldGVjdCBIVE1MIGVudGl0aWVzIHRoYXQgZG9uJ3QgZW5kIGluIGEgc2VtaWNvbG9uIGJlY2F1c2Ugc29tZSBicm93c2VycyBhbGxvdyB0aGF0LgogCi0JCUlmIHRoZSBgYCRjaGFyc2V0YGAgcGFyYW1ldGVyIGlzIGxlZnQgZW1wdHksIHRoZW4geW91ciBjb25maWd1cmVkIGBgJGNvbmZpZ1snY2hhcnNldCddYGAgdmFsdWUgd2lsbCBiZSB1c2VkLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwkJSWYgdGhlIGBgJGNoYXJzZXRgYCBwYXJhbWV0ZXIgaXMgbGVmdCBlbXB0eSwgdGhlbiB5b3VyIGNvbmZpZ3VyZWQgYGAkY29uZmlnWydjaGFyc2V0J11gYCB2YWx1ZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL3Nlc3Npb25zLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvc2Vzc2lvbnMucnN0CmluZGV4IDAxMGI0NjQuLjNlNmRjZjIgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvc2Vzc2lvbnMucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMvc2Vzc2lvbnMucnN0CkBAIC0yNjIsNyArMjYyLDcgQEAKID09PT09PT09PT09PT09PT09PT0KIAogWW91J2xsIGZpbmQgdGhlIGZvbGxvd2luZyBTZXNzaW9uIHJlbGF0ZWQgcHJlZmVyZW5jZXMgaW4geW91cgotYXBwbGljYXRpb24vY29uZmlnL2NvbmZpZy5waHAgZmlsZToKKyphcHBsaWNhdGlvbi9jb25maWcvY29uZmlnLnBocCogZmlsZToKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFByZWZlcmVuY2UgICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgICAgICAgT3B0aW9ucyAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCkBAIC0yODEsNyArMjgxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlIGJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiAoQ29va2llIGRyaXZlciBvbmx5KS4KICoqc2Vzc190YWJsZV9uYW1lKiogICAgICAgICBjaV9zZXNzaW9ucyAgICAgQW55IHZhbGlkIFNRTCB0YWJsZSBuYW1lICAgIFRoZSBuYW1lIG9mIHRoZSBzZXNzaW9uIGRhdGFiYXNlIHRhYmxlIChDb29raWUgZHJpdmVyIG9ubHkpLgogKipzZXNzX3RpbWVfdG9fdXBkYXRlKiogICAgIDMwMCAgICAgICAgICAgICBUaW1lIGluIHNlY29uZHMgICAgICAgICAgICAgVGhpcyBvcHRpb25zIGNvbnRyb2xzIGhvdyBvZnRlbiB0aGUgc2Vzc2lvbiBjbGFzcyB3aWxsIHJlZ2VuZXJhdGUgaXRzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY3JlYXRlIGEgbmV3IHNlc3Npb24gaWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY3JlYXRlIGEgbmV3IHNlc3Npb24gSUQuIFNldHRpbmcgaXQgdG8gMCB3aWxsIGRpc2FibGUgc2Vzc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQgcmVnZW5lYXJ0aW9uLgogKipzZXNzX21hdGNoX2lwKiogICAgICAgICAgIEZBTFNFICAgICAgICAgICBUUlVFL0ZBTFNFIChib29sZWFuKSAgICAgICAgV2hldGhlciB0byBtYXRjaCB0aGUgdXNlcidzIElQIGFkZHJlc3Mgd2hlbiByZWFkaW5nIHRoZSBzZXNzaW9uIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgc29tZSBJU1BzIGR5bmFtaWNhbGx5IGNoYW5nZXMgdGhlIElQLCBzbyBpZiB5b3Ugd2FudCBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tZXhwaXJpbmcgc2Vzc2lvbiB5b3Ugd2lsbCBsaWtlbHkgc2V0IHRoaXMgdG8gRkFMU0UuCkBAIC02NzMsNCArNjc0LDQgQEAKIAkJRXhhbXBsZTo6CiAKIAkJCSR0aGlzLT5zZXNzaW9uLT50ZW1wZGF0YSgnbWVzc2FnZScpOwotCQkJLy9yZXR1cm5zICdUZXN0IG1lc3NhZ2UuJyBjb25zaWRlcmluZyB0aGUgc2V0X3RlbXBkYXRhIGV4YW1wbGUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCQkJLy9yZXR1cm5zICdUZXN0IG1lc3NhZ2UuJyBjb25zaWRlcmluZyB0aGUgc2V0X3RlbXBkYXRhIGV4YW1wbGUuCmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL3htbHJwYy5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvbGlicmFyaWVzL3htbHJwYy5yc3QKaW5kZXggNTNmZTk2NS4uZDliMmRmYiAxMDA2NDQKLS0tIGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL2xpYnJhcmllcy94bWxycGMucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS9saWJyYXJpZXMveG1scnBjLnJzdApAQCAtMzA3LDcgKzMwNyw3IEBACiBUaGUgQ2xpZW50CiAtLS0tLS0tLS0tCiAKLVVzaW5nIGEgdGV4dCBlZGl0b3IsIGNyZWF0ZSBhIGNvbnRyb2xsZXIgY2FsbGVkIHhtbHJwY19jbGllbnQucGhwLiBJbgorVXNpbmcgYSB0ZXh0IGVkaXRvciwgY3JlYXRlIGEgY29udHJvbGxlciBjYWxsZWQgWG1scnBjX2NsaWVudC5waHAuIEluCiBpdCwgcGxhY2UgdGhpcyBjb2RlIGFuZCBzYXZlIGl0IHRvIHlvdXIgYXBwbGljYXRpb24vY29udHJvbGxlcnMvCiBmb2xkZXI6OgogCkBAIC0zNDgsNyArMzQ4LDcgQEAKIFRoZSBTZXJ2ZXIKIC0tLS0tLS0tLS0KIAotVXNpbmcgYSB0ZXh0IGVkaXRvciwgY3JlYXRlIGEgY29udHJvbGxlciBjYWxsZWQgeG1scnBjX3NlcnZlci5waHAuIEluCitVc2luZyBhIHRleHQgZWRpdG9yLCBjcmVhdGUgYSBjb250cm9sbGVyIGNhbGxlZCBYbWxycGNfc2VydmVyLnBocC4gSW4KIGl0LCBwbGFjZSB0aGlzIGNvZGUgYW5kIHNhdmUgaXQgdG8geW91ciBhcHBsaWNhdGlvbi9jb250cm9sbGVycy8KIGZvbGRlcjo6CiAKQEAgLTU2OSw0ICs1NjksNCBAQAogCQkJCSdzdHJ1Y3QnCiAJCQkpOwogCi0JCXJldHVybiAkdGhpcy0+eG1scnBjLT5zZW5kX3Jlc3BvbnNlKCRyZXNwb25zZSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCQlyZXR1cm4gJHRoaXMtPnhtbHJwYy0+c2VuZF9yZXNwb25zZSgkcmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvdXNlcl9ndWlkZV9zcmMvc291cmNlL3R1dG9yaWFsL25ld3Nfc2VjdGlvbi5yc3QgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvdHV0b3JpYWwvbmV3c19zZWN0aW9uLnJzdAppbmRleCBkNzc1NGU5Li5hZDllZDQxIDEwMDY0NAotLS0gYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvdHV0b3JpYWwvbmV3c19zZWN0aW9uLnJzdAorKysgYi91c2VyX2d1aWRlX3NyYy9zb3VyY2UvdHV0b3JpYWwvbmV3c19zZWN0aW9uLnJzdApAQCAtMTYsNyArMTYsNyBAQAogZGF0YWJhc2Ugb3Igb3RoZXIgZGF0YSBzdG9yZXMuIFRoZXkgcmVwcmVzZW50IHlvdXIgZGF0YS4KIAogT3BlbiB1cCB0aGUgYXBwbGljYXRpb24vbW9kZWxzIGRpcmVjdG9yeSBhbmQgY3JlYXRlIGEgbmV3IGZpbGUgY2FsbGVkCi1uZXdzX21vZGVsLnBocCBhbmQgYWRkIHRoZSBmb2xsb3dpbmcgY29kZS4gTWFrZSBzdXJlIHlvdSd2ZSBjb25maWd1cmVkCitOZXdzX21vZGVsLnBocCBhbmQgYWRkIHRoZSBmb2xsb3dpbmcgY29kZS4gTWFrZSBzdXJlIHlvdSd2ZSBjb25maWd1cmVkCiB5b3VyIGRhdGFiYXNlIHByb3Blcmx5IGFzIGRlc2NyaWJlZAogYGhlcmUgPC4uL2RhdGFiYXNlL2NvbmZpZ3VyYXRpb24uaHRtbD5gXy4KIApAQCAtODUsNyArODUsNyBAQAogdGhhdCBhcmUgZ29pbmcgdG8gZGlzcGxheSB0aGUgbmV3cyBpdGVtcyB0byB0aGUgdXNlci4gVGhpcyBjb3VsZCBiZSBkb25lCiBpbiBvdXIgcGFnZXMgY29udHJvbGxlciBjcmVhdGVkIGVhcmxpZXIsIGJ1dCBmb3IgdGhlIHNha2Ugb2YgY2xhcml0eSwgYQogbmV3ICJuZXdzIiBjb250cm9sbGVyIGlzIGRlZmluZWQuIENyZWF0ZSB0aGUgbmV3IGNvbnRyb2xsZXIgYXQKLWFwcGxpY2F0aW9uL2NvbnRyb2xsZXJzL25ld3MucGhwLgorYXBwbGljYXRpb24vY29udHJvbGxlcnMvTmV3cy5waHAuCiAKIDo6CiAKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJcHVibGljIGZ1bmN0aW9uIGluZGV4KCkKIAl7Ci0JCWRhdGFbJ25ld3MnXSA9ICR0aGlzLT5uZXdzX21vZGVsLT5nZXRfbmV3cygpOworCQkkZGF0YVsnbmV3cyddID0gJHRoaXMtPm5ld3NfbW9kZWwtPmdldF9uZXdzKCk7CiAJCSRkYXRhWyd0aXRsZSddID0gJ05ld3MgYXJjaGl2ZSc7CiAKIAkJJHRoaXMtPmxvYWQtPnZpZXcoJ3RlbXBsYXRlcy9oZWFkZXInLCAkZGF0YSk7CmRpZmYgLS1naXQgYS91c2VyX2d1aWRlX3NyYy9zb3VyY2UvdHV0b3JpYWwvc3RhdGljX3BhZ2VzLnJzdCBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS90dXRvcmlhbC9zdGF0aWNfcGFnZXMucnN0CmluZGV4IDk3Yzc0NjAuLjMzMGE1MGUgMTAwNjQ0Ci0tLSBhL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS90dXRvcmlhbC9zdGF0aWNfcGFnZXMucnN0CisrKyBiL3VzZXJfZ3VpZGVfc3JjL3NvdXJjZS90dXRvcmlhbC9zdGF0aWNfcGFnZXMucnN0CkBAIC0yMCw3ICsyMCw3IEBACiBBcyBVUkwgc2NoZW1lcyBiZWNvbWUgbW9yZSBjb21wbGV4LCB0aGlzIG1heSBjaGFuZ2UuIEJ1dCBmb3Igbm93LCB0aGlzCiBpcyBhbGwgd2Ugd2lsbCBuZWVkIHRvIGtub3cuCiAKLUNyZWF0ZSBhIGZpbGUgYXQgYXBwbGljYXRpb24vY29udHJvbGxlcnMvcGFnZXMucGhwIHdpdGggdGhlIGZvbGxvd2luZworQ3JlYXRlIGEgZmlsZSBhdCBhcHBsaWNhdGlvbi9jb250cm9sbGVycy9QYWdlcy5waHAgd2l0aCB0aGUgZm9sbG93aW5nCiBjb2RlLgogCiA6Ogo=